Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 嵌套组Linq查询与Groupby扩展方法_C#_.net_Linq_Lambda_Grouping - Fatal编程技术网

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

C# 嵌套组Linq查询与Groupby扩展方法,c#,.net,linq,lambda,grouping,C#,.net,Linq,Lambda,Grouping,我试图使用GroupByextension方法转换下面的嵌套分组 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 gr

我试图使用
GroupBy
extension方法转换下面的嵌套分组

        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,我认为您的第一个查询(在您的中)将使用方法语法:

   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公共语言运行库(CLR)的方法调用,因此两者在语义上是相同的,只是查询语法是语法糖,有助于使查询更简单、更易于阅读。

它返回
IEnumerable
。返回类型被包装在附加的枚举中。我不得不使用额外的循环来获得实际结果。你知道这是否可以避免吗?太棒了!!现在我必须仔细分析你是如何转换的+1.
    var res1 = teamHistories.GroupBy(x => x.Date, (key, g1) =>
                                    g1.Select(x => new { key, x })
                                         .GroupBy(x => x.x.Event, g => g));
   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);