LiNQ有不同的结果

时间:2012-10-05 02:48:15

标签: c# .net linq

我有一个名为Variables的类,它有多个成员,其中一个名为Name,这是一个字符串。假设我有List<Variables>。这有Names XYYZ

string variableName = 'Y';

int _totalCount = (from p in variableList
                    where p.Name == variableName
                    select p.Name).Count();

int _totalCount2 = variableList.Select(x => x.Name == variableName).Count();

问题:为什么_totalCount会在2返回_totalCount2时返回4这就是我想要的)?

1 个答案:

答案 0 :(得分:7)

因为Select没有按照您的想法执行操作:它是投影,而不是过滤器。 为列表中的每个项目计算表达式x => x.Name == variableName。您将获得{False, True, True, False}。然后在结果上调用Count(),返回4

使用带有谓词的Where方法进行过滤:

int _totalCount2 = variableList.Where(x => x.Name == variableName).Count();