3

我调用了这个类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

4

1 回答 1

7

因为Select没有做你认为它做的事情:它是一个投影,而不是一个过滤器。该表达式x => x.Name == variableName是针对列表中的每个项目计算的。你会得到{False, True, True, False}. 然后Count()调用结果,返回4.

过滤是使用带有Where谓词的方法完成的:

int _totalCount2 = variableList.Where(x => x.Name == variableName).Count();
于 2012-10-05T02:50:41.580 回答