C# 通过lambda表达式获取子节点值
我想使用lambda表达式从C# 通过lambda表达式获取子节点值,c#,linq,C#,Linq,我想使用lambda表达式从name节点和fix节点获取值 <Issue> <name>asdasasdasd</name> <fix>zxcczxczxczzxc </fix> </Issue> 你的问题还很不清楚,但我怀疑你可能想要这样的东西: // I would strongly discourage you from using global variables... var issues = doc.D
name
节点和fix
节点获取值
<Issue>
<name>asdasasdasd</name>
<fix>zxcczxczxczzxc </fix>
</Issue>
你的问题还很不清楚,但我怀疑你可能想要这样的东西:
// I would strongly discourage you from using global variables...
var issues = doc.Descendants("Issue")
.Select(x => new IssueModel((string) x.Element("name"),
(string) x.Element("fix")))
.ToList();
ToList()
调用将强制立即计算查询;没有它,每次迭代问题时都会重新评估它
请注意,如果问题
中缺少名称
或修复
元素,使用上面的代码,您将得到一个空引用。您可以改为使用x.Element(“name”).Value
(对于fix
),在这种情况下,如果元素丢失,您将立即得到一个异常。谢谢,它起到了作用。我们使用enumerable是因为在该XML中,只有issue node和fix node标记。@Vecto7:不清楚“我们使用enumerable”是什么意思,但听起来您可以使用到字符串的显式转换,而不是值
属性,如果这就是您的意思…在XML文件中有50个issue and fix节点,所以我使用了AsEnumerable()而不是list@Vecto7:这听起来像是不合情理的。你认为你会得到什么好处?这并不是说50个对象代表了显著的内存损失…@Vecto7:即使你想使用惰性计算,你也不需要调用一个numerable。
// I would strongly discourage you from using global variables...
var issues = doc.Descendants("Issue")
.Select(x => new IssueModel((string) x.Element("name"),
(string) x.Element("fix")))
.ToList();