首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ / Multiple GroupBy.哪个是正确的用法,递归用法还是链式用法?

问LINQ / Multiple GroupBy.哪个是正确的用法,递归用法还是链式用法?
EN

Stack Overflow用户
提问于 2014-09-26 14:44:46
回答 1查看 214关注 0票数 0

假设我有一个DataTable,我想对它进行3级分组(或者将来更多)。为了简化,我将要求两个级别。

代码语言:javascript
复制
DataTable dt = getTable();

使用LINQ,我可以想到两种方法。第一,

代码语言:javascript
复制
var chainWay = dt.Rows.Cast<DataRow>().GroupBy(dr => new { A = dr["A"], B = dr["B"] })
                                      .GroupBy(g => new { g.Key.A });
foreach (var group in chainWay)
{
    foreach (var group2 in group)
    {
        foreach (DataRow dr in group2)
        {

        }
    }
}

第二,

代码语言:javascript
复制
var recursiveWay = dt.Rows.Cast<DataRow>().GroupBy(dr => dr["A"])
                          .Select(g => new { g.Key, G = g.GroupBy(dr => dr["B"]) });
foreach (var group in recursiveWay)
{
    foreach (var group2 in group.G)
    {
        foreach (DataRow dr in group2)
        {

        }
    }
}

哪条路是合适的?第一,第二还是其他?

会有什么不同的表现吗?

请记住,我想对此作一个概括(对于更多的级别)。

提前谢谢你的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-26 15:25:02

这似乎是“主要基于意见”的边缘。这是我多次使用的第三种选择。它更详细,但我认为它使结构更清晰。它也很容易看到嵌套的重复性质,所以很容易推广到更多的分组。

代码语言:javascript
复制
var query = source.GroupBy(
    x => x.A,
    (a, aGroup) => new
    {
        A = a,
        Items = aGroup.GroupBy(
            x => x.B,
            (b, bGroup) => new
            {
                B = b,
                Items = bGroup
            })
    });

当然,正在实例化的匿名对象可以被适当的类替换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26062273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档