阅读this问题(和回答)我发现至少有两种方法可以让IQueryabe
之外的不同项目同时选择要过滤的内容。这两种方法是:
table.GroupBy(x => x.field).Select(x => x.FirstOrDefault());
或使用MoreLinqs DistinctBy
table.DistinctBy(x => x.field);
但该线程并未解释性能差异,何时应该使用另一个。那么我什么时候想要使用另一个呢?
答案 0 :(得分:3)
他们所做的事情有很大的不同,因此预期会有性能差异。
GroupBy
将为原始集合中的每个密钥创建一个集合,然后将其传递给Select
。 DistinctBy
只需要保留一个哈希集,其中包含之前遇到密钥的天气,因此它可以更快。
如果DistinctBy
足以让您始终使用它,那么只有在需要每个组中的元素时才使用GroupBy
。
例如,对于LINQ到EF,DistinctBy
运算符将无效。