我正在使用实体框架。我典型的访问功能如下所示:
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并链接到其他表来解决该问题,但是不能在此配置中进行。可能吗?
最佳答案
如果Product
和ProductDetail
之间的关系是一对多,则可以执行以下操作:
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/