c# - C# linq 从 XElement 树中选择重复项
问题描述
这是我的 XElement 树
XElement myShoppingList = new XElement("myShoppingList",
new XElement("Pasadena", new XAttribute("Vendor", "Tesla"),
new XElement("Car",
new XElement("model3",
new XElement("Black")))),
new XElement("LasVegas", new XAttribute("Vendor", "Tesla"),
new XElement("Car",
new XElement("modelY",
new XElement("White")))),
new XElement("Pasadena", new XAttribute("Vendor", "Apple"),
new XElement("Phone",
new XElement("model13",
new XElement("Black")))),
new XElement("Pasadena", new XAttribute("Vendor", "Apple"),
new XElement("Phone",
new XElement("model12",
new XElement("White")))));
我似乎无法让这个工作,第一个问题 - 搜索“帕萨迪纳”时,我应该得到 3 次重复:
var query = myShoppingList.Elements().AsEnumerable()
.GroupBy(x => x.XPathSelectElement("Pasadena"))
.Where(g => g.Count() > 1)
.Select(y => new { Element = y.Key, Counter = y.Count() })
.ToList();
在拉斯维加斯搜索特斯拉时,我期待 1 次重复
var query = myShoppingList.Elements().AsEnumerable()
.GroupBy(x => x.XPathSelectElement("Pasadena[@Name='Tesla']"))
.Where(g => g.Count() > 1)
.Select(y => new { Element = y.Key, Counter = y.Count() })
.ToList();
最后,我想搜索“白色”,无论是谁制作了小部件,然后显示其制造商。所以我期待2次重复:
var query = myShoppingList.Elements().AsEnumerable()
.GroupBy(x => x.XPathSelectElement("../../../White"))
.Where(g => g.Count() > 1)
.SelectMany(y => y})
.ToList();
我无法让这个工作我做错了什么?
解决方案
我似乎无法让这个工作,第一个问题 - 搜索“帕萨迪纳”时,我应该得到 3 次重复:
这是你想要达到的目标吗?:
var query = myShoppingList.XPathSelectElements("Pasadena")
.GroupBy(x => x.Name)
.Select(y => new { Element = y.Key, Counter = y.Count() });
在拉斯维加斯搜索特斯拉时,我期待 1 次重复
你可以这样试试。
var query = myShoppingList.XPathSelectElements("Pasadena")
.Where(x => x.Attributes().Any(x => x.Name == "Vendor" && x.Value == "Tesla"))
.GroupBy(x => x.Name)
.Select(y => new { Element = y.Key, Counter = y.Count() });
对于这个,我不确定这是否是你想要实现的
var query = myShoppingList.XPathSelectElements("//White")
.GroupBy(x => x.Name)
.Select(y => new { Element = y.Key, Counter = y.Count() });
推荐阅读
- nginx - 如何让 nginx 同时处理 fastcgi 请求?
- javascript - 出于某种原因,此代码导致所有单选按钮都被预先填充为选中状态。它始终是组内的最后一个
- angular - 如何以角度绑定和更改动态组件输入?
- nginx - 每当出现 502 错误时如何让 nginx 运行脚本
- configuration - 专用集群的 Apache Ray 自动集群设置
- angular - 如何在 TypeScript 中将数字与数字相加
- string - 如何对一组数字进行字符串匹配?
- filepond - 在文件池中使用 HEIC 文件?
- swift - UICollectionView stackview 可重用单元问题
- node.js - 将参数传递给打字稿装饰器