相同之处
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
是将所有的数据加载到内存中,然后在内存中做分组操作,所以刚才说的附加过滤操作是无法支持的。