gpt4 book ai didi

c# - 嵌套组 Linq 查询与 Groupby 扩展方法

转载 作者:行者123 更新时间:2023-11-30 16:04:14 24 4
gpt4 key购买 nike

我试图使用 GroupBy 转换嵌套分组下方扩展方法。

        var res = from th in teamHistories
group th by th.Date into grp1
from grp2 in
(from th in grp1 group th by th.Event)
group grp2 by grp1.Key;

这将返回一个 IEnumerable<IGrouping<KeySelector, IGrouping<KeySelector, Object>> ;产生树状结构 -

FirstGroup -> Key(Date) 
Elements - SecondGroup -> Key(Event)
Elements - (TeamHistory) ..

但是当我尝试使用 GroupBy 扩展方法编写类似的查询时,它的工作方式似乎有所不同。根据 Groupby 方法的签名,它返回 IEnumerable<IGrouping<TKey, TSource>> .意味着如果我尝试嵌套它返回 IEnumerable<IEnumerable<IGrouping<KeySelector, Elements>>>当然,这会产生不希望的结果。

这是我尝试过的:

    var res1 = teamHistories.GroupBy(x => x.Date, (key, g1) =>
g1.Select(x => new { key, x })
.GroupBy(x => x.x.Event, g => g));

问题 -

  1. 这是进行此类嵌套的正确方法吗?因为我得到的结果是不同的。它正在返回 IEnumerable<IEnumerable<IGrouping<KeySelector, Elements>>>而不是 IEnumerable<KeySelector, IGrouping<KeySelector, IGrouping<KeySelector, Object>>> .

  2. GroupBy 有什么限制吗?与 Group by 相比的扩展方法Linq 查询中的子句?

这是完整的 snippet如果有人想重现结果。

最佳答案

我认为您的第一个查询(在您的 snipped 中)将是使用方法语法的这种方式:

   var res1 = teamHistories.Where(th => th.TeamName.ToLower() == "xxx")
.GroupBy(th=>th.Date)
.SelectMany (grp1 => grp1.GroupBy (th => th.Event), (grp1, grp2) => new {grp1 = grp1, grp2 = grp2})
.GroupBy (temp0 => temp0.grp1.Key, temp0 => temp0.grp2);

关于你的第二个问题,使用方法语法没有限制。事实上,在编译代码时,您使用查询语法的第一个查询必须转换为 .NET 公共(public)语言运行时 (CLR) 的方法调用,因此两者在语义上是相同的,只是查询语法是语法糖,有助于使查询更简单和更易于阅读。

关于c# - 嵌套组 Linq 查询与 Groupby 扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35372419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com