[英]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.