2

阅读这个问题(和答案),我发现至少有两种方法可以让不同的项目在一段IQueryabe时间内仍然可以选择过滤的内容。这两种方法是:

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

或使用 MoreLinqsDistinctBy

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

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

4

1 回答 1

3

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

如果DistinctBy你总是使用它就足够了,只有GroupBy在你需要每个组中的元素时才使用它。

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

于 2017-09-05T10:49:52.593 回答