簡體   English   中英

需要幫助來了解一些代碼示例嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM