我刚刚发现了这个lambda表达式:
myCustomerList.GroupBy(cust => cust.CustomerId).Select(grp => grp.First());
如果我错了,请纠正我,但是对于这个lambda,您可以区分myCustomerList
上的CustomerId
,这是我所需要的。但我想弄清楚它是如何运作的。
第一步是groupby
:这个结果在字典IGouping<long, Customer>
中,CustomerId
作为字典的键。
第二次选择发生,这是我没有得到的部分。选择选择客户,但如何从字典中选择客户?你需要一个密钥,因为分组。那把钥匙在哪里? First()
如何在这里帮助?
你能详细告诉我最后一部分是如何运作的吗?
答案 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的独特客户。