[英]Need help understanding some code sample?
最近,在這個論壇中瀏覽最近的C#問題/答案時,我偶然發現了一段linq-to-xml代碼,雖然我無法完全理解,但由於喜歡使用linq-to-xml,這使我感到困惑,因為我無法弄清楚該過程將逐步逐步執行什么操作。
這是代碼片段
var cons = xdoc.Descendants("xref")
.Where(x=>x.Attribute("rid").Value.Contains("ref"))
.GroupBy(x=>x.Parent)
.Select(grp=> new
{
Parent = grp.Key,
ConsecutiveNodes = grp.Select((n, i)=> new
{
Index = i+1,
Node = n
}),
Count = grp.Count()
})
.ToList();
誰能詳細向我解釋一下
.Select(grp=> new
{
Parent = grp.Key,
ConsecutiveNodes = grp.Select((n, i)=> new
{
Index = i+1,
Node = n
}),
Count = grp.Count()
})
是在做? 我從未在另一個匿名類型中使用過匿名類型,而且我也沒有得到多參數lambda表達式(n,i)=>new...
(除了簡單的情況是,一個參數是字符,另一個是索引) )? 這段代碼到底在做什么?
這是文件(由代碼的OP發布) xml文件
通過將查詢分為兩部分來了解Linq
第一部分
var cons = xdoc.Descendants("xref")
.Where(x => x.Attribute("rid").Value.Contains("ref"))
.GroupBy(x => x.Parent);
第二部分
var consSelect = cons.Select(grp => new
{
Parent = grp.Key,
ConsecutiveNodes = grp.Select((n, i) => new
{
Index = i + 1,
Node = n
}),
Count = grp.Count()
})
.ToList();
在第一部分中,您將獲取所有外部參照,並按父級對XML進行分組。 每當您對元素進行分組時,分組后的元素將被視為鍵。
所以在第二部分中,grp.key為您提供父元素,count為您提供每個組中外部參照的數量,連續節點再次是{index,Node}對象的集合,其中包含每個外部參照作為節點,'i'作為索引(我只是一個迭代器)
Select方法具有重載,可讓您使用索引
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.