[英]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
};
(我還在SubjectName
和Score
添加了.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.