Linq分组键不唯一。

9

我有以下代码,它导致了 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());

评论不适合进行长时间的讨论;此对话已被移至聊天室 - user3956566
1
数据库是什么(SQL Server还是其他)以及排序规则是什么? - Evk
1个回答

2
你可以使用 ToLookup 来代替。
var x = db.Hotels.ToLookup(hotel => hotel.CountryCode);  

对于那些想知道ToLookup背后代码的人,你可以查看Microsoft Github repo
基本上,ToLookup使用EqualityComparer<TKey>.Default来比较键,并执行在使用group by和to dictionary时需要手动执行的操作。
我不确定,但是LinqPad没有显示将ToLookup转换为SQL查询的任何迹象,所以我认为它是在内存中执行的。

这个解决方案有同样的问题。 - Aleksandr Ivanov
3
@BoYeeWoods,您能否发布执行该查询时生成的SQL代码? - Aleksandr Ivanov
@AleksandrIvanov,我已经添加了代码链接,请查看。 - dev-masih
@MasihAkbari - ToLookup函数在内存中执行还是在SQL中执行? - user1672994
我也有同样的疑虑。 - user1672994
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接