Linq - 查询有什么不同

时间:2018-01-10 17:26:22

标签: c# linq

linq查询都提供相同的输出,查询有什么不同吗? 我们需要使用哪一个?

IEnumerable.Where(条件)。任何();

IEnumerable.Any(条件);

2 个答案:

答案 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)代替==