GroupBy with multiple groups as a hierarchy(GroupBy将多个组作为层次结构)
本文介绍了GroupBy将多个组作为层次结构的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用GroupBy创建要在多个子网格中使用的组的层次结构集。
假设我有一个包含6列的查询,a、b、c、d、e、f。
现在,我需要依次按a、b和c分组,并返回c组中的整行。
var q = rows.GroupBy(x => x.a)
好的,那很好。这就是我的a组。接下来,我们按a和b对它们进行分组。
var q1 = q.Select(g =>new {
Key = g.Key,
SubGroup = g.GroupBy(x => x.b)
}
好的,这也很好用。我得到我的a组和b的子组。
现在我在第三级被难住了。我尝试了各种语法,但大多数都不能编译。这样做的结果不正确。
var q2 = q1.Select(g1 => new {
Key = g1.Key,
SubGroup = g1.GroupBy(x => x.c)
}
这不能编译。告诉我G1上没有GroupBy。
var q2 = q.Select(g1 => new {
Key = g1.Key,
SubGroup = g1.GroupBy(x => x.c)
}
这没有给我b子组,只给了a和c。
知道我这里做错了什么吗?
编辑:
以下代码也不起作用,说明没有g1.key的定义
var q2 = q.Select(g => new {
Key = g.Key,
SubGroup = g.Select(g1 => new {
Key = g1.Key
SubGroup = g1.GroupBy(a => a.c)
})
我对这在内部是怎么回事的了解太差了。
推荐答案
现在,我不是说这实际上是一种好方法;它可能会很慢,如果性能很重要,正确的做法可能是按照这些不同的条件对整个集合进行排序,然后查看已排序集合的不同部分。
但是,如果您想使用GroupBy
和IGroupings
来管理它,那么您就做错了。您希望首先从最深的级别开始,然后逐步向上。
var groups = rows
.GroupBy(x => new { x.A, x.B, x.C, x.D, x.E, x.F })
.GroupBy(x => new { x.Key.A, x.Key.B, x.Key.C, x.Key.D, x.Key.E })
.GroupBy(x => new { x.Key.A, x.Key.B, x.Key.C, x.Key.D, })
.GroupBy(x => new { x.Key.A, x.Key.B, x.Key.C })
.GroupBy(x => new { x.Key.A, x.Key.B })
.GroupBy(x => x.Key.A);
groups.First().Key; // will be an A value
groups.First().First().First(); // will be an A, B, C group
这篇关于GroupBy将多个组作为层次结构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:GroupBy将多个组作为层次结构
猜你喜欢
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- 输入按键事件处理程序 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01