c# - LINQ - 如何根据仅存在于某些记录中的另一个元素选择一个元素
问题描述
我有一些代码如下:
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 });
如果我运行这个查询,一切正常——我得到一个包含组名和查询的结果,因为查询元素在两个实例中都存在。但是,我的数据的真实情况是这个 Query 元素只在某些时候出现。
如果我从 XML 的第一部分中删除 Query 元素,我会得到一个空异常。XML 现在看起来像这样:
xmlGroupInfo.InnerXml = "<Groups><Group><Name>Test1</Name></Group><Group><Name>Test0</Name><Query>1 = 0</Query></Group></Groups>";
那么,我该如何实现我的目标,即选择 Name 元素,但前提是存在具有一些非空值的 Query 元素?
解决方案
您只需要处理子句Query
中可选的元素。Where
最简单的方法是使用null 条件运算符:
.Where(d => d.Element("Query")?.Value != null)
// ^ this
推荐阅读
- fonts - 有没有办法在不指定行或列的情况下增加 Altair 中 .facet 的字体大小?
- c# - Json.net 反序列化类数组的数组
- php - 如何将 Achnor 添加到分类链接
- git - 尝试将 React 应用推送到 git 失败,因为 babel 的包名太大
- reactjs - 从自动选择的国家获取区号
- javascript - 如何遍历这些跨度中的字母并按索引顺序从数组中为每个字母分配颜色?
- python - 如何使用 Pyspark 将字符串列转换为十进制列
- mongodb - 使用 Mongo rawCollection().aggregate() 复制/克隆集合时流星锁定
- javascript - 为 React 动态添加/删除组件生成唯一键
- audio - 为什么使用 ffmeg 交换音轨时文件大小不同?