GroupBy将多个组作为层次结构 [英] GroupBy with multiple groups as a hierarchy

查看:73
本文介绍了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)
        })

我对这在内部是怎么回事的了解太差了。

推荐答案

现在,我不是说这实际上是一种好方法;它可能会很慢,如果性能很重要,正确的做法可能是按照这些不同的条件对整个集合进行排序,然后查看已排序集合的不同部分。

但是,如果您想使用GroupByIGroupings来管理它,那么您就做错了。您希望首先从最深的级别开始,然后逐步向上。

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将多个组作为层次结构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆