如何使用LINQ检查所有项目是否属于同一类型

Lam*_*mps 5 c# linq

public class  Product
{
public string Name {set; get;}
public string Type {set; get;}
}

public class ProductType
{
public string Name{get;set}
}


var products = GetProducts();
var productTypes = GetProductTypes(); 

bool isValid = products.All(x=>x.Type == ??) // Help required
Run Code Online (Sandbox Code Playgroud)

我想确保"产品"中的所有产品仅属于产品类型.

如何在linq中实现这一目标.任何帮助非常感谢我对LINQ的东西感到震惊?谢谢.

Joe*_*oey 12

你可以使用Distinct和Count:

isValid = products.Select(x => x.Type).Distinct().Count() == 1;
Run Code Online (Sandbox Code Playgroud)


dtb*_*dtb 10

您可以检查所有项目是否与第一个项目具有相同的类型:

bool isValid = products.All(x => x.Type == products.First().Type);
Run Code Online (Sandbox Code Playgroud)

  • @Lamps请注意它有不必要的性能成本,因为每次匿名方法调用时,`First()`都将执行.请查看我的答案以获得更好的解决方案. (3认同)

Jef*_*hao 6

var isValid = products.Select(p => p.Type).Distinct().Count() == 1;
Run Code Online (Sandbox Code Playgroud)

要么

var first = products.FirstOrDefault();
var isValid == (first == null) ? true : products.All(p => p.Type == first.Type);
Run Code Online (Sandbox Code Playgroud)