做DistinctBy()是否更有效。选择()或选择()。DistinctBy()? C#

时间:2017-12-02 16:27:50

标签: c# linq

我有这段代码,但我不确定下面两个选项中的哪一个会更有效率。任何人都可以让我知道哪个更有效,为什么?

var list1 = await context.Data.Where(i => i.Market == "nasdaq").DistinctBy(i => i.Symbol).Select(i => i.Symbol).ToListAsync();

var list2 = await context.Data.Where(i => i.Market == "nasdaq").Select(i => i.Symbol).DistinctBy(i => i).ToListAsync();

注意:我使用MoreLinq库

1 个答案:

答案 0 :(得分:8)

由于MoreLinq库未在DistinctBy上提供IQueryable<T>,仅在IEnumerable<T>上,Where之后的第一个查询部分在内存中完成。因此,整个对象被转移,这是次优的。

第二个查询仅需Symbol,因此稍微好一些。但是,重复的符号仍会传输到内存中,因此可以进行优化。

您可以通过观察DistinctBy(i => i)Distinct()相同来改进它:

var list2 = await context.Data
    .Where(i => i.Market == "nasdaq")
    .Select(i => i.Symbol)
    .Distinct()
    .ToListAsync();

现在一切都在RDBMS方面完成,包括消除重复。