C # Объяснение о лямбда-выражении - PullRequest
4 голосов
/ 06 сентября 2011

Я только что нашел это лямбда-выражение:

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

Исправьте меня, если я ошибаюсь, но с помощью этой лямбды вы можете различить myCustomerList на CustomerId, и этов точности то, что мне нужно.Но я пытаюсь выяснить, как это работает.

Первый шаг - это groupby: это результат в словаре, IGouping<long, Customer> с CustomerId в качестве ключа словаря.

Во-вторых, происходит выбор, и это часть, которую я не получаю.Выбор выбирает клиента, но как он может выбрать клиента из словаря?Вам нужен ключ для этого, потому что группа по.Где этот ключ?И как First() помогает здесь?

Не могли бы вы подробно рассказать, как работает последняя часть?

Ответы [ 2 ]

4 голосов
/ 06 сентября 2011

Он не выбирает его из словаря - он говорит для каждой группировки в результате GroupBy, выберите первую запись Обратите внимание, что IGrouping<TKey, TElement> реализует IEnumerable<TElement>.

В основном у группы есть две вещи:

  • ключ
  • Список элементов

Это выбор первого элемента из каждой группы.

3 голосов
/ 06 сентября 2011

Допустим, ваша коллекция:

{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}

Следовательно, это отдельный клиент на основе идентификатора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...