C#关于lambda表达式的解释

时间:2011-09-06 09:38:20

标签: c# linq lambda

我刚刚发现了这个lambda表达式:

myCustomerList.GroupBy(cust => cust.CustomerId).Select(grp => grp.First());

如果我错了,请纠正我,但是对于这个lambda,您可以区分myCustomerList上的CustomerId,这是我所需要的。但我想弄清楚它是如何运作的。

第一步是groupby:这个结果在字典IGouping<long, Customer>中,CustomerId作为字典的键。

第二次选择发生,这是我没有得到的部分。选择选择客户,但如何从字典中选择客户?你需要一个密钥,因为分组。那把钥匙在哪里? First()如何在这里帮助?

你能详细告诉我最后一部分是如何运作的吗?

2 个答案:

答案 0 :(得分:4)

它不是从字典中选择它 - 它是在GroupBy 的结果中为每个分组说,选择第一个条目。请注意,IGrouping<TKey, TElement>实现了IEnumerable<TElement>

基本上,一个小组有两件事:

  • 一把钥匙
  • 元素列表

这是从每个组中选择第一个元素。

答案 1 :(得分:3)

Lets说你的收藏是:

{Name=a, CustomerId=1}
{Name=a, CustomerId=1}
{Name=b, CustomerId=2}
{Name=b, CustomerId=2}

分组后变为

{ key = 1, Values = {Name=a, CustomerId=1}, {Name=a, CustomerId=1} }
{ key = 2, Values = {Name=a, CustomerId=2}, {Name=a, CustomerId=2} }

在最后一次选择之后(即从上面的符号中的值中选择第一个,它变为:

{Name=a, CustomerId=1}
{Name=a, CustomerId=2}

因此,它是基于ID的独特客户。