阅读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运算符将不起作用。

关于c# - GroupBy和MoreLinq的DistinctBy之间的性能差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46051984/

10-09 20:34