[英]LinQ GroupBy on nested element with same attributes
我有以下xml輸出:
<R N="1">
<MT N="Section" V="Section-1" />
<MT N="Person" V="John" />
</R>
<R N="2">
<MT N="Section" V="Section-1" />
<MT N="Person" V="Peter" />
</R>
<R N="3">
<MT N="Section" V="Section-2" />
<MT N="Person" V="Joseph" />
</R>
……
<R N="N">
<MT N="Section" V="Section-J" />
<MT N="Person" V="PersonX" />
</R>
我試圖組成一個LinQ查詢來按節將所有結果分組,使用節值作為鍵,將整個元素用作元素選擇器:
//MyElements its an IEnumerable<XElement>
var something = MyElements.GroupBy
(
x => x.Elements("MT")
.Where
(
type => type.Attribute("N").Value == "Section"
)
.Select
(
type => type.Attribute("V").Value
)
,
x=>x
);
當我調試我的東西變量不包含元素。
有什么建議嗎?
提前致謝。
約瑟
鍵選擇最終以IEnumerable<string>
作為結果,這肯定是錯誤的。 它應該給您留下一個簡單的string
,可以用
x => x.Elements("MT").Single(t => t.Attribute("N").Value == "Section")
.Attribute("V").Value
您也不需要身份投影x => x
,因為這是隱含的。
最后,如果MyElements
本身不是空的,則給出的代碼將永遠不會導致something
為空。
如果我正確理解您的要求,它將是:
var res = doc.Descendants("MT")
.Where(x => x.Attribute("N").Value == "Section")
.GroupBy(x => x.Attribute("V").Value,
(k, v) => new { Key = k, List = v.Select(x => x.Parent).ToList() })
.ToList();
結果:
我認為您追求的是:
var something = MyElements.GroupBy
(
x => x.Elements("MT")
.First
(
type => type.Attribute("N").Value == "Section"
)
.Attribute("V").Value
,
x=>x
);
(盡管不需要最后一個x=>x
是隱含的。)
實時示例: http : //rextester.com/MDAO1198
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.