C# 需要帮助理解一些代码示例吗?
最近,在这个论坛上浏览最近的c#问题/答案时,我偶然发现了一段linq to xml代码,我无法完全理解,但作为一个喜欢使用linq to xml的人,它让我感到很烦,因为我无法一步一步地弄清楚这个过程到底在做什么 下面是代码片段C# 需要帮助理解一些代码示例吗?,c#,linq,linq-to-xml,anonymous-types,C#,Linq,Linq To Xml,Anonymous Types,最近,在这个论坛上浏览最近的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=> n
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发布)Select方法有一个重载,允许您使用索引
选择方法有一个重载,允许您使用索引
让我们通过将查询分为两部分来理解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”作为索引(i只是一个迭代器)让我们通过将查询分为两部分来理解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”作为索引(i只是一个迭代器)您有正在使用的XML吗?这可能有助于我们更好地解释它way@G_S我已经更新了问题并添加了与OP帖子相同的链接…这是一个嵌套字典:Dictionary@jdweng你能详细解释一下吗?看看迈克尔的回答。我会更改代码。如果失败,请尝试以下操作:.GroupBy(x=>(string)x.Parent)您有正在使用的XML吗?这可能有助于我们更好地解释它way@G_S我已经更新了问题并添加了与OP帖子相同的链接…这是一个嵌套字典:Dictionary@jdweng你能详细解释一下吗?看看迈克尔的回答。我会更改代码。如果失败,请尝试以下操作:.GroupBy(x=>(字符串)x.Parent)