如何使用LINQ计算与条件匹配的元素数

Stu*_*urm 23 c# linq count

我尝试了很多东西,但对我来说最符合逻辑的是这个:

int divisor = AllMyControls.Take(p => p.IsActiveUserControlChecked).Count();
Run Code Online (Sandbox Code Playgroud)

AllMyControls是一家集的UserControls,我想知道的是有多少UserControlsIsActiveUserControlChecked属性设置为true.

我在VS中获得的是:

Cannot convert lambda expression to type 'int' because it is not a delegate type
Run Code Online (Sandbox Code Playgroud)

我的表情有什么问题?

Adr*_*iro 55

int divisor = AllMyControls.Where(p => p.IsActiveUserControlChecked).Count()
Run Code Online (Sandbox Code Playgroud)

或者干脆

int divisor = AllMyControls.Count(p => p.IsActiveUserControlChecked);
Run Code Online (Sandbox Code Playgroud)

既然你是初学者,那么看看Enumerable文档是值得的

  • 更简单:D`int divisor = AllMyControls.Count(p => p.IsActiveUserControlChecked);` (6认同)
  • @keyboardP我在评论之前将其添加到答案中,但感谢输入:) (2认同)

Pie*_*ult 6

为什么不直接使用Count?该== true陈述也非常多余.

int divisor = AllMyControls.Count(p => p.IsActiveUserControlChecked);
Run Code Online (Sandbox Code Playgroud)

此外,您在Take方法上收到错误,因为它正在等待int.您需要从要获取的集合的开头指定连续元素的数量,不能放置lambda表达式.你需要使用TakeWhile.所以

int divisor = AllMyControls.TakeWhile(p => p.IsActiveUserControlChecked == true).Count();
Run Code Online (Sandbox Code Playgroud)

本来是正确的,但不会按照你期望的方式工作; 一旦条件被打破就停止.所以,如果AllMyControls包含true, true, false, true,TakeWhileCount将返回2,而不是你预期的3.