[英]Is it more efficient to do DistinctBy().Select() or Select().DistinctBy()? C#
我有这段代码,但是我不确定下面的2个选项中哪个更有效。 谁能让我知道哪个更有效,为什么?
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库
由于MoreLinq库未在IQueryable<T>
上提供DistinctBy
,仅在IEnumerable<T>
上提供了DistinctBy
,这是您在内存Where
完成位置之后的第一个查询的一部分。 因此,整个对象被传输,这是次优的。
第二个查询仅使用Symbol
,因此稍微好一点。 但是,重复的符号仍会传输到内存中,因此存在优化的空间。
您可以通过观察DistinctBy(i => i)
与Distinct()
相同来改进它:
var list2 = await context.Data
.Where(i => i.Market == "nasdaq")
.Select(i => i.Symbol)
.Distinct()
.ToListAsync();
现在,一切都在RDBMS方面完成,包括消除重复项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.