我有一个C#类
public class ProductCategory {
public int ProductCategoryId { get; set; }
public string ProductCategoryName { get; set; }
public List<Product> Products { get; set; }
产品有名称、价格等属性
我想要一个linq查询,它将返回带有产品数组的产品类别的结构,但仅当产品的属性等于一个值时。例如价格是10的地方。
我试过了
productCategory.SelectMany(p => p.Products).Where(x => x.Price == 10)
但这返回给我一个产品数组,但我想要产品类别中所有符合条件的产品。
作为一个额外的挑战,我也有多个标准,所以在这个例子中,假设价格等于10,30和50。其中一个标准有两个值,这就增加了复杂性。我要做的只是调用不同的选择标准,然后在结尾处连接它们
var equalToTen = productCategory.Select... x.Price == 10
var equalToThirty = productCategory.Select... x.Price == 30
var equalToFiftyANdNameIsTest = productCategory.Select... x.Price == 50 && x.Name == "Test"
return equalToTen.Union(equalToThirty).Union(equalToFiftyANdNameIsTest)
但我确信它可以在一个语句中完成,而不需要在结尾处连接
只需对其产品使用.any()
,它将返回至少有一个匹配产品的所有类别:
productCategory.Where(c => c.Products.Any(p = > p.Price == 10)).ToList();