关于linq:C#关于lambda表达式的解释

C# Explanation about a lambda expression

我刚找到这个lambda表达式:

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

如果我是错的,请纠正我,但是有了这个lambda,你就可以区分myCustomerListCustomerId上的myCustomerList,这正是我需要的。但我想弄清楚它是如何工作的。

第一步是groupby:这就产生了一个字典,IGouping,其中CustomerId是字典的键。

第二个选择发生了,这是我没有得到的部分。select选择一个客户,但是它如何从字典中选择一个客户呢?因为group by,您需要一个密钥。钥匙在哪里?那么,First()是如何帮助这里的呢?

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


它不是从字典中选择它——它是说,对于GroupBy的结果中的每个分组,选择第一个条目。注意,IGrouping执行IEnumerable

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

  • 钥匙
  • 元素列表

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


让我们说你的收藏是:

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

分组后,它变成

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

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

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

因此,它是基于ID的不同客户。