【发布时间】:2021-10-15 17:24:51
【问题描述】:
这是我的 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();
在 LasVegas 搜索 Tesla 时,我预计会有 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();
我无法让这个工作我做错了什么?
【问题讨论】:
-
不工作是什么意思?
-
我不断得到这个回报:System.Collections.Generic.List
1[<>f__AnonymousType02[System.Xml.Linq.XElement,System.Int32]] -
在这种情况下,您的 GroupBy 看起来没有必要。你可以简单地做
.Select(e => e.Name.LocalName);。也不需要计数。 -
是的,在我已经知道要提前选择哪个元素的情况下,我完全了解 select 语句。但是,我的实际 XML 列表有我试图识别的随机重复项。而且因为它们是随机的,我不知道会发生什么。因此我无法进行高级选择。
-
@Syntax_MM 我认为您必须在此处详细说明您的期望。
.GroupBy(x => x.XPathSelectElement("Pasadena"))您的意图尚不清楚。每个“Pasadena”元素都是一个单独的对象,因此element1 != element2不会被分组。你的意思是myShoppingList.XPathSelectElements("/Pasadena")?
标签: c# linq linq-to-xml