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());
或者使用MoreLinqsDistinctBy
table.DistinctBy(x => x.field);
但该线程并没有解释性能差异以及何时应该使用一个线程而不是另一个线程。那么什么时候我想使用一个而不是另一个呢?它们的功能有很大的不同,因此性能上的差异是可以预期的。
GroupBy
将为原始集合中的每个键创建一个集合,然后将其传递给选择DistinctBy
只需保留一个哈希集,其中包含它以前遇到过的键的天气,因此它可以更快
如果DistinctBy
足以让您始终使用它,则仅当您需要每个组中的元素时才使用GroupBy
另外,对于LINQ to EF,例如,DistinctBy
运算符将不起作用。请注意,MoreLinq的DistinctBy
在内存中起作用,它不会转换为sql,也不会由db执行GroupBy
可能由您的查询提供程序实现并在db上执行。因此,如果我有一个包含1000项的IQueryable
,其中只有两项是重复的GroupBy
将创建一个集合999collection
?Yes is将创建IGrouping
。但是您应该注意,IQueryable
,可能没有为实体框架实现DistincyBy
操作符,因此它将在运行时失败。此讨论适用于内存中LINQ。对于EF,我看到的DistinctBy
操作员实现实际上在引擎盖下使用GroupBy
,不会有任何性能差异(例如:)DistinctBy是第三方库