我有这段代码,但我不确定下面两个选项中的哪一个会更有效率。任何人都可以让我知道哪个更有效,为什么?
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库
答案 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方面完成,包括消除重复。