GroupBy 和 MoreLinq 的 DistinctBy 之间的性能差异

Performance difference between GroupBy and MoreLinq's DistinctBy

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

table.GroupBy(x => x.field).Select(x => x.FirstOrDefault());

或使用 MoreLinqs DistinctBy

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

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

他们所做的事情有很大的不同,因此性能差异是意料之中的。 GroupBy 将为原始集合中的每个键创建一个集合,然后再将其传递给 SelectDistinctBy 只需要保留一个哈希集,其中包含以前遇到过密钥的天气,因此速度会快得多。

如果 DistinctBy 足以让您一直使用它,如果您需要每个组中的元素,则只使用 GroupBy

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