繁体   English   中英

Linq-查询中是否有任何区别

[英]Linq - Is there any difference in the queries

两个linq查询都提供相同的输出,查询中是否有任何区别? 我们需要使用哪一个?

IEnumerable.Where(条件).Any();

IEnumerable.Any(条件);

someIEnumerable.Where(condition).Any()someIEnumerable.Any(condition)相同。

需要使用哪一个是一个问题,但是ReSharper和我更喜欢较短的那个。 我知道,没有性能差异,只有可读性。

我确实知道很多人更喜欢someIEnumerable.Where(condition).Count()的可读性超过someIEnumerable.Count(condition)

这两个查询:

var q1 = list.Where(l => list1.Where(l1 => l1.Name.ToLower() == l.Name.ToLower()).Any()).ToList();
var q2 = list.Where(l => list1.Any(l1 => l1.Name.ToLower() == l.Name.ToLower())).ToList();

在IL中表示为:

IL_01B2:  ldloc.1     // list
IL_01B3:  ldloc.0     // CS$<>8__locals0
IL_01B4:  ldftn       UserQuery+<>c__DisplayClass0_0.<Main>b__0
IL_01BA:  newobj      System.Func<UserQuery+Dev,System.Boolean>..ctor
IL_01BF:  call        System.Linq.Enumerable.Where<Dev>
IL_01C4:  call        System.Linq.Enumerable.ToList<Dev>
IL_01C9:  stloc.2     // q1
IL_01CA:  ldloc.1     // list
IL_01CB:  ldloc.0     // CS$<>8__locals0
IL_01CC:  ldftn       UserQuery+<>c__DisplayClass0_0.<Main>b__2
IL_01D2:  newobj      System.Func<UserQuery+Dev,System.Boolean>..ctor
IL_01D7:  call        System.Linq.Enumerable.Where<Dev>
IL_01DC:  call        System.Linq.Enumerable.ToList<Dev>
IL_01E1:  stloc.3     // q2

根据IL,没有功能上的差异。 当问:“有什么区别吗?”时,首先要检查一下IL。

至于什么更好,那就是见解。 对我来说, Any()更有意义。

旁注:我建议在这里使用string.Compare(string, string, bool)代替==

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM