Ключ группы Linq не является уникальным - PullRequest
0 голосов
/ 21 мая 2018

У меня есть следующие коды, которые вызывают System.ArgumentException:

Элемент с таким же ключом уже был добавлен.Ключ: PH

_HotelsByCountry = db.Hotels
   .GroupBy(hotel => hotel.CountryCode)
   .ToDictionary(group => group.Key, group => group.ToList());

Означает ли это, что групповой ключ является не уникальным при использовании операции GroupBy?

Обновление hotel.CountryCode - тип string.

Обновление CountryCode - внешний ключ.

Обновление sql serverи ef core 2.0

Обновление работает следующий код

_HotelsByCountry = db.Hotels
   .GroupBy(hotel => hotel.CountryCode.Trim())
   .ToDictionary(group => group.Key, group => group.ToList());

1 Ответ

0 голосов
/ 21 мая 2018

Вы можете использовать ToLookup Вместо

var x = db.Hotels.ToLookup(hotel => hotel.CountryCode);  

Для тех, кто хочет знать код за ToLookup, вы можете проверить Microsoft Github repo

В основном ToLookup использует EqualityComparer<TKey>.Default, чтобы сравнивать ключи и делать то, что вы должны делать вручную, при использовании группировки по и в словаре.

Я не уверен, но linqpad не показывает никаких признаков преобразования ToLookup в SQL-запрос, поэтому я думаю, что это извиняемая память

...