在this question中,如果我需要在输出中包含“日期”,应该进行哪些更改?
当我加入时
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);
}
答案 0 :(得分: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
和SubjectName
中添加了Score
。
答案 1 :(得分:1)
假设l
不为空,则l.Element("Date")
为空,这意味着您的一个或多个L1
元素没有子Date
元素。
修复将取决于您想要对缺少的日期做什么。如果您想将default(DateTime)
用作“魔术”日期,则可以执行以下操作:
let dt = (l.Element("Date") == null ? default(DateTime) : l.Element("Date").Value)
答案 2 :(得分:1)
看看你的其他XML,正如Skeet先生提到的那样,它没有<date>
元素中的任何内容。如果您不打算总是在那里有数据,则需要明确处理。
您可以这样做:
let dt = l.Element("date") == null ? string.Empty : l.Element("date").Value