6
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

我想确保“产品”中的所有产品都只属于产品类型。

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

4

4 回答 4

12

您可以使用 Distinct 和 Count:

isValid = products.Select(x => x.Type).Distinct().Count() == 1;
于 2012-06-11T07:03:30.093 回答
10

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

bool isValid = products.All(x => x.Type == products.First().Type);
于 2012-06-11T07:03:23.003 回答
6
var isValid = products.Select(p => p.Type).Distinct().Count() == 1;

或者

var first = products.FirstOrDefault();
var isValid == (first == null) ? true : products.All(p => p.Type == first.Type);
于 2012-06-11T07:03:44.843 回答
0

如果您只想检查 LINQ 中每个元素的类型,那么 -

class A{
}

class B{
}

static void Main(string[] args)
{
       ArrayList arr = new ArrayList();
       arr.Add(new A());
       arr.Add(new A());
       arr.Add(new A());
       arr.Add(new B());
       arr.Add(new A());
       int count= arr.ToArray().Count(x=> !x.GetType().Equals(typeof(A)));
}

上面的示例,检查数组中每个元素的类型,然后从数组中获取非类类型 A 的元素的计数。

我希望你有同样的情况,希望这会有所帮助!

于 2012-06-11T07:23:20.543 回答