我正在使用实体框架。我典型的访问功能如下所示:

    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();
        }
    }


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


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


我想做的(但还没有解决)是在ProductDetails表上应用选择条件。

.Find(我的函数)中的内容可以用标准的.Where子句代替,但是我需要对MinTerm和MaxTerm(在ProductDetails中)进行过滤,但仍返回完整的Product数据集(包括链接的实体),而不仅仅是ProductDetails 。

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


我可以通过先引用ProductDetails并链接到其他表来解决该问题,但是不能在此配置中进行。可能吗?

最佳答案

如果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();

关于c# - Entity Framework 中的Linq SelectMany,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39960150/

10-17 02:32