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);