我有一个名为Variables
的类,它有多个成员,其中一个名为Name
,这是一个字符串。假设我有List<Variables>
。这有Names
X
,Y
,Y
,Z
。
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
(这就是我想要的)?
答案 0 :(得分:7)
因为Select
没有按照您的想法执行操作:它是投影,而不是过滤器。
为列表中的每个项目计算表达式x => x.Name == variableName
。您将获得{False, True, True, False}
。然后在结果上调用Count()
,返回4
。
使用带有谓词的Where
方法进行过滤:
int _totalCount2 = variableList.Where(x => x.Name == variableName).Count();