LINQ - 如何 select 一个元素基于仅存在于某些记录中的另一个元素

LINQ - How to select one element based on another element that exists in only some records

我有一些代码如下:

XmlDocument xmlGroupInfo = new XmlDocument();
xmlGroupInfo.InnerXml = "<Groups><Group><Name>Test1</Name><Query>Hello</Query></Group><Group><Name>Test0</Name><Query>1 = 0</Query></Group></Groups>";
XElement filterDoc = XElement.Parse(xmlGroupInfo.InnerXml);
var groupsWithFilters2 = filterDoc
    .Descendants("Group")
    .Where(d => d.Element("Query").Value != null)
    .Select(n => new { a = n.Element("Name").Value, b = n.Element("Query").Value });

如果我 运行 这个查询一切正常 - 我得到了一个包含组名和查询的结果,因为查询元素存在于两个实例中。但是,我的数据的真实情况是此查询元素仅在某些时候出现。

如果我从 XML 的第一部分中删除 Query 元素,我将得到一个 null 异常。 XML 现在看起来像这样:

xmlGroupInfo.InnerXml = "<Groups><Group><Name>Test1</Name></Group><Group><Name>Test0</Name><Query>1 = 0</Query></Group></Groups>";

那么,如何实现我的目标,即 select Name 元素,但仅当存在具有非空值的 Query 元素时?

您只需要处理在 Where 子句中可选的 Query 元素。最简单的方法就是这样,使用 null conditional operator:

.Where(d => d.Element("Query")?.Value != null)
//                            ^ this