相同之处
C# 中的 GroupBy 方法,大家一般都知道是用来给数据集合做分组的,至于 ToLookup 方法,我本人用的比较少,估计很多人也不清楚是什么作用,其实它也可以对集合做分组操作。
但是两者也具有一些不同之处。
不同之处
ToLookup返回的是ILookup<TKey, TSource>, 同时ILookup<TKey, TSource>也实现了IEnumerable<IGrouping<TKey, TSource>>接口。GroupBy直接返回了IEnumerable<IGrouping<Tkey, TSource>>。ILookup<TKey, TSource>有一个方便的属性索引器,所以它具有像字典一样的行为,但IEnumerable<IGrouping<Tkey, TSource>>不能使用索引器来操作。ToLookup是立即执行的,而GroupBy是懒加载的。针对数据库的 Linq To Database 来说,GroupBy会被解析成 SQL 中的group by关键词,所以它是在服务器端被执行的而不是在客户端,因此如果想在 group key 上做一些过滤条件,比如:having,这是完全支持的;相反ToLookup是将所有的数据加载到内存中,然后在内存中做分组操作,所以刚才说的附加过滤操作是无法支持的。