You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求GroupBy带键选择器与元素选择器重载的等效LINQ查询语法

等效LINQ查询语法解析

你问的这个GroupBy<TSource, TKey, TElement>重载,对应的LINQ查询语法其实很直观——就是**group [投影后的元素] by [分组键]**的形式。

举个具体的例子帮你理解:假设我们有一个Product集合,每个产品有ProductId、ProductName和CategoryId属性。如果用方法语法写的话是这样:

// 方法语法:使用带elementSelector的GroupBy重载
var groupedProducts = products.GroupBy(
    p => p.CategoryId, // keySelector:按CategoryId分组
    p => new { p.ProductId, p.ProductName } // elementSelector:只保留产品ID和名称作为组内元素
);

对应的LINQ查询语法就是:

// 查询语法:完全等效于上面的方法调用
var groupedProducts = from p in products
                      group new { p.ProductId, p.ProductName } by p.CategoryId;

关键点说明

  • 查询语法里,group后面的部分就是elementSelector的逻辑——你可以在这里直接定义要放入分组的元素(比如投影成匿名类型、某个单一属性,甚至是经过计算的值)。
  • by后面的部分就是keySelector的逻辑,用来指定分组的依据键。
  • 编译器会自动把这个查询语法翻译成你提到的那个GroupBy泛型重载,两者在运行时的行为完全一致。

如果是不带elementSelector的简单分组(比如直接把原元素放入分组),查询语法就是group p by p.CategoryId,对应的是另一个不带elementSelector的GroupBy重载——而你问的这个带投影元素的场景,只需要在group后面明确写出要投影的元素即可。

内容的提问来源于stack exchange,提问作者InBetween

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:53:21