linq查询都提供相同的输出,查询有什么不同吗? 我们需要使用哪一个?
IEnumerable.Where(条件)。任何();
IEnumerable.Any(条件);
答案 0 :(得分:3)
someIEnumerable.Where(condition).Any()
与someIEnumerable.Any(condition)
相同。
您需要使用哪一个是一个意见问题,但ReSharper和我更喜欢较短的一个。我所知道的没有性能差异,只有可读性。
我知道很多人更喜欢someIEnumerable.Where(condition).Count()
比someIEnumerable.Count(condition)
答案 1 :(得分:0)
这两个问题:
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时,首先应该检查IL:&#34;有什么不同吗?&#34;。
至于什么是更好的意见问题。对我来说,Any()
更有意义。
附注:我建议在此处使用string.Compare(string, string, bool)
代替==
。