阅读this问题(和答案)后,我发现至少有两种方法可以从IQueryabe
中分离出不同的项目,同时仍然可以选择要过滤的内容。这两种方法是:
table.GroupBy(x => x.field).Select(x => x.FirstOrDefault());
或使用MoreLinqs
DistinctBy
table.DistinctBy(x => x.field);
但是,该线程并不能解释性能差异以及何时应该在另一个之上使用它。那么我什么时候要使用另一个?
最佳答案
他们所做的工作有很大的不同,因此预期会有性能差异。GroupBy
将为原始集合中的每个键创建一个集合,然后再将其传递给Select
。 DistinctBy
只需要保留一个哈希集,其中包含它之前曾遇到过的密钥的天气,因此它可以更快。
如果DistinctBy
足以让您始终使用它,则仅在需要每个组中的元素时才使用GroupBy
。
同样对于LINQ to EF,例如DistinctBy
运算符将不起作用。
关于c# - GroupBy和MoreLinq的DistinctBy之间的性能差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46051984/