提问者:小点点

Linq基于子类属性选择数组项


我有一个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)

但我确信它可以在一个语句中完成,而不需要在结尾处连接


共1个答案

匿名用户

只需对其产品使用.any(),它将返回至少有一个匹配产品的所有类别:

productCategory.Where(c => c.Products.Any(p = > p.Price == 10)).ToList();