了解 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<>
.
我正在通过 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<>
.