Linq SelectMany in Entity Framework

时间:2016-10-10 14:04:17

标签: c# entity-framework linq

我正在使用实体框架。我的典型访问功能是这样的:

    public IEnumerable<Product> Category(string category, int term)
    {
        using (var uow = new UnitOfWork(Connections.LoanComparision))
        {
            var r = new Repository<Product>(uow.Context);

            return r.Find(x => x.Category == category)
                .Include(x => x.ProductDetails)
                .Include(x => x.ProductRates)
                .Include(x => x.Provider)
                .ToList();
        }
    }

您将从上面的代码中注意到2件事。

  • 查询返回包含链接类别的产品列表 实体。
  • 每个产品都有许多ProductDetail行。

我想做的事情(并且无法解决)是在ProductDetails表上应用选择标准。

.Find(我的函数)里面的东西可以用标准的.Where子句代替,但是我需要过滤MinTerm和MaxTerm(在ProductDetails中)但仍然返回完整的Product数据集(包括链接的实体),不只是ProductDetails。

Where(x => term >= x.MinTerm && term <= x.MaxTerm)

我可以通过首先引用ProductDetails并链接到其他表来解决如何操作,但不能在此配置中进行。有可能吗?

1 个答案:

答案 0 :(得分:1)

如果ProductProductDetail之间的关系是一对多,您可以这样做:

var query= context.ProductDetails.Include(pd=>pd.Product.ProductRates)
                                 .Include(pd=>pd.Product.Provider)
                                 .Where(pd=> pd.Product.Category == category 
                                             && term >= pd.MinTerm && term <= pd.MaxTerm);

如果您想要产品列表,您可以执行以下操作:

var query1=query.Select(pd=>pd.Product).Distinct().ToList();