簡體   English   中英

具有嵌套循環的Linq XML查詢 - 1

[英]Linq XML query with nested loop - 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);
}

如果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
        };

(我還在SubjectNameScore添加了.Value )。

假設l不為null,則l.Element("Date")為null,這意味着您的一個或多個L1元素沒有子Date元素。

修復程序取決於您想要丟失日期的內容。 如果要將default(DateTime)用作“魔術”日期,則可以執行以下操作:

let dt = (l.Element("Date") == null ? default(DateTime) : l.Element("Date").Value)

看看你的其他XML,正如Skeet先生所提到的那樣,它沒有<date>元素中的任何內容。 如果您不打算總是在那里有數據,則需要明確地處理它。

你可以這樣做:

let dt = l.Element("date") == null ? string.Empty : l.Element("date").Value 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM