Linq组的关键并不是唯一的

Bo *_*ods 9 c# linq entity-framework-core ef-core-2.0

我有以下代码,导致System.ArgumentException:

已添加具有相同键的项目.重点:PH

_HotelsByCountry = db.Hotels
   .GroupBy(hotel => hotel.CountryCode)
   .ToDictionary(group => group.Key, group => group.ToList());
Run Code Online (Sandbox Code Playgroud)

这是否意味着组密钥唯一的在使用时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());
Run Code Online (Sandbox Code Playgroud)

dev*_*sih 2

您可以使用ToLookup代替

var x = db.Hotels.ToLookup(hotel => hotel.CountryCode);  
Run Code Online (Sandbox Code Playgroud)

对于那些想了解背后代码的人ToLookup可以查看Microsoft Github 存储库

基本上ToLookup用于EqualityComparer<TKey>.Default比较键并执行在使用 group by 和字典时手动执行的操作。

我不确定,但是 linqpad 没有显示任何将 ToLookup 转换为 SQL 查询的迹象,所以我认为它是在内存中执行的

  • @BoYeeWoods 你能发布执行该查询时生成的 SQL 代码吗? (3认同)