C# LINQ转Lambda表达式:GroupBy与into g/select g部分写法问询
正确转换LINQ查询语法为Lambda表达式
嘿,我帮你梳理下这个问题~你原来的查询语法是按RoomID和RateGroupID的组合作为分组键来处理数据的,但你尝试的Lambda写法用错了GroupBy的重载参数,咱们来修正下:
先看你原本的查询语法:
var ListInOrder = (from f in finaldatelist group f by new { f.RoomID, f.RateGroupID } into g select g);
这段代码的核心逻辑是把finaldatelist的元素按RoomID+RateGroupID的组合分组,最终返回所有分组的集合(也就是IGrouping<匿名类型, 元素类型>的集合)。
你尝试的GroupBy(x => x.RoomID, x => x.RateGroupID)里,第二个参数是「元素选择器」(用来指定分组里要保留的元素内容),并不是分组键的一部分。正确的做法是把分组键写成和查询语法一致的匿名类,直接传给GroupBy的第一个参数:
正确的Lambda写法
var ListInOrder = finaldatelist.GroupBy(f => new { f.RoomID, f.RateGroupID });
为什么可以省略Select()?
因为原来的查询语法里select g就是直接返回分组后的IGrouping对象,而GroupBy方法本身返回的就是这个集合,所以完全不需要额外加Select()。如果你想显式写出这一步(虽然没必要),也可以写成:
var ListInOrder = finaldatelist.GroupBy(f => new { f.RoomID, f.RateGroupID }) .Select(g => g);
这和上面的写法完全等价,只是多了一步冗余的选择操作。
内容的提问来源于stack exchange,提问作者supsupdb
相关产品推荐
相关产品推荐

