C# GroupBy和MoreLinq之间的性能差异';很明显

C# GroupBy和MoreLinq之间的性能差异';很明显,c#,.net,linq,morelinq,C#,.net,Linq,Morelinq,在阅读问题(和答案)时,我发现至少有两种方法可以从IQueryabe中提取不同的项目,同时还可以选择要过滤的内容。这两种方法是: table.GroupBy(x => x.field).Select(x => x.FirstOrDefault()); 或者使用MoreLinqsDistinctBy table.DistinctBy(x => x.field); 但该线程并没有解释性能差异以及何时应该使用一个线程而不是另一个线程。那么什么时候我想使用一个而不是另一个呢?它们的

在阅读问题(和答案)时,我发现至少有两种方法可以从
IQueryabe
中提取不同的项目,同时还可以选择要过滤的内容。这两种方法是:

table.GroupBy(x => x.field).Select(x => x.FirstOrDefault());
或者使用MoreLinqs
DistinctBy

table.DistinctBy(x => x.field);

但该线程并没有解释性能差异以及何时应该使用一个线程而不是另一个线程。那么什么时候我想使用一个而不是另一个呢?

它们的功能有很大的不同,因此性能上的差异是可以预期的。
GroupBy
将为原始集合中的每个键创建一个集合,然后将其传递给
选择
DistinctBy
只需保留一个哈希集,其中包含它以前遇到过的键的天气,因此它可以更快

如果
DistinctBy
足以让您始终使用它,则仅当您需要每个组中的元素时才使用
GroupBy


另外,对于LINQ to EF,例如,
DistinctBy
运算符将不起作用。

请注意,MoreLinq的
DistinctBy
在内存中起作用,它不会转换为sql,也不会由db执行
GroupBy
可能由您的查询提供程序实现并在db上执行。因此,如果我有一个包含1000项的
IQueryable
,其中只有两项是重复的
GroupBy
将创建一个集合999
collection
?Yes is将创建
IGrouping
。但是您应该注意,
IQueryable
,可能没有为实体框架实现
DistincyBy
操作符,因此它将在运行时失败。此讨论适用于内存中LINQ。对于EF,我看到的
DistinctBy
操作员实现实际上在引擎盖下使用
GroupBy
,不会有任何性能差异(例如:)DistinctBy是第三方库