lamba表达式嵌套.select并使用较低级别的导航属性

时间:2016-12-13 16:42:20

标签: entity-framework linq

    var discount= q.Products
        .SelectMany(qp => qp.ProductMods)
        .SelectMany(qpm => qpm.ModDiscounts)
        .Where(qmd => qmd.DiscountID == discountid)
    .Sum(qmd => qmd.DiscountValue  * 

    (q.Products.SelectMany(qpm => qpm.ProductMods).Select(qpm => qpm.Quantity)).FirstOrDefault()

    );

我想像上面这样做:

    var discount= q.Products
        .SelectMany(qp => qp.ProductMods)
        .SelectMany(qpm => qpm.ModDiscounts)
        .Where(qmd => qmd.DiscountID == discountid)
    .Sum(qmd => qmd.DiscountValue  * qpm.Quantity);

但我无法访问qpm.Quantity值,因为它的级别更高。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果ProductModsModDiscounts之间的关系是一对多,那么您应该在ModeDiscountProductMod中拥有导航属性,因此您的查询可能如下:

  var discount= q.Products
        .SelectMany(qp => qp.ProductMods)
        .SelectMany(qpm => qpm.ModDiscounts)
        .Where(qmd => qmd.DiscountID == discountid)
        .Sum(qmd => qmd.DiscountValue  * qmd.ProductMod.Quantity);