1

この質問で、出力に「日付」を含める必要がある場合、どのような変更を行う必要がありますか?

私が含めたとき

let dt = l.Element("Date").Value

「オブジェクト参照がオブジェクトのインスタンスに設定されていません」と表示されます

var query = from l in doc.Descendants("L1")
            let dt = l.Element("Date").Value
            let id = l.Attribute("id").Value
            from subject in l.Descendants("Subject")
            select new
            {
                Date = dt,
                Id = id,
                SubjectName = (string)subject.Attribute("SubjectName"),
                Score = (string)subject.Attribute("Score")
            };


foreach (var result in query)
{
    Console.WriteLine(result);
}
4

3 に答える 3

2

l要素がない場合Date、アクセスしようとするl.Element("Date").Valueとエラーが発生します。条件付きを使用できます:

var query = from l in doc.Descendants("L1")
        let dt = l.Elements("date").Any() 
                 ? l.Element("date").Value
                 : AnyDefaultValueIWantForDate
        let id = l.Attribute("id").Value
        from subject in l.Descendants("Subject")
        select new
        {
            Date = dt,
            Id = id,
            SubjectName = subject.Attribute("SubjectName").Value,
            Score = subject.Attribute("Score").Value
        };

(とを追加しました.Value)。SubjectNameScore

于 2012-05-21T19:26:12.217 に答える
1

<date>他の XML を見ると、Skeet 氏が言及したように、要素には何も含まれていません。常にそこにデータを保持する予定がない場合は、明示的に処理する必要があります。

次のようなことができます。

let dt = l.Element("date") == null ? string.Empty : l.Element("date").Value 
于 2012-05-21T19:27:45.563 に答える
1

lnull ではないと仮定すると nulll.Element("Date")になります。これは、1 つ以上のL1要素に子要素がないことを意味しますDate

修正は、欠落している日付をどうしたいかによって異なります。default(DateTime)「魔法の」日付として使用したい場合は、次のようにします。

let dt = (l.Element("Date") == null ? default(DateTime) : l.Element("Date").Value)
于 2012-05-21T19:20:40.937 に答える