检查列表中的所有值是否相等

Chi*_*Chi 8 c# linq lambda

Class order {
Guid Id;
int qty;
}
Run Code Online (Sandbox Code Playgroud)

使用LINQ表达式,如何验证qty列表中的所有订单是否相同?

提前致谢!

Tim*_*ter 21

你可以使用GroupBy:

bool allEqual = orders.GroupBy(o => o.qty).Count() == 1;
Run Code Online (Sandbox Code Playgroud)

或者,更有效率,使用Enumerable.All:

bool allEqual = !orders.GroupBy(o => o.qty).Skip(1).Any();
Run Code Online (Sandbox Code Playgroud)

  • +1第二种方式肯定更有效率. (7认同)
  • 如果你在lambda中移动`orders.First().qty`,你就不会得到空序列的异常(因为如果序列为空则不会调用lambda) - 以重新计算值为代价每次调用lambda时. (2认同)
  • @ sepp2k:因此我只想在开头使用`if(orders.Any()){}`.这是明确和有效的. (2认同)
  • 你可以通过`var allEqual =!orders.GroupBy(o => o.qty).Skip(1).Any()`来略微提高GroupBy版本的效率.现在,如果你有很多数量,它只检查第二个是否存在而不是计算所有组(但是`.All(`版本仍然更好). (2认同)