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
我有一些代码如下:
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