【发布时间】:2021-04-29 15:23:41
【问题描述】:
我有一个看起来像这样的课程
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)
但我确信它可以在单个语句中完成,而无需在末尾连接。
更新
ProductCaegory 也不是一个单一的。它是对数据库进行 EF 查询的结果。所以它需要返回子类 Product 查询匹配的多个 ProductCategories。
【问题讨论】:
-
这里的问题是您希望
ProductCategorys 作为查询的结果,但在其Products属性中包含元素子集。这意味着您要么必须操作现有的ProductCategory对象,要么创建新对象。 -
@Dominik 确实如此,而且由于 LINQ 查询不应该有副作用,我们不应该操纵原件