本文介绍了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将多个组作为层次结构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!