了解 Linq 中 GroupBy 的重载

Understanding overloads of GroupBy in Linq

我正在通过 linq GroupBy 扩展方法并偶然发现了一个让我感到困惑的重载,现在这将产生这样的结果

 int[] numbers = {1,1,1,2,2,3,4,4,4,4,4,5,5 };
            var result = numbers.GroupBy(g => g).Select(s => new {
                key=s.Key,
                data=s
            });

但我的问题是,如何使用其他重载,例如这个

我如何使用这个重载,我搜索了很多博客,但没有博客向我解释所有的重载

elementSelector 可让您项目 元素(您的数字)。

int[] numbers = {1,1,1,2,2,3,4,4,4,4,4,5,5 };
var result = numbers.GroupBy(g => g, i => 2 * i); // project each number to the doubled value

导致

3 times 2    (2 * 1)
2 times 4    (2 * 2)
1 time  6    (2 * 3)
5 times 8    (2 * 4)
2 times 10   (2 * 5)

我个人更喜欢重载 resultSelector 而不是额外调用 Select:

int[] numbers = {1,1,1,2,2,3,4,4,4,4,4,5,5 };
var result = numbers.GroupBy(g => g, (key, g) => new {
    key,
    data=g
 });

resultSelector 相当于您示例中的后续 Select 调用,但它将键和该键的元素序列作为单独的参数,而 Select 有效在结果 IGrouping<>.