我正在使用实体框架。我的典型访问功能是这样的:
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件事。
我想做的事情(并且无法解决)是在ProductDetails表上应用选择标准。
.Find(我的函数)里面的东西可以用标准的.Where子句代替,但是我需要过滤MinTerm和MaxTerm(在ProductDetails中)但仍然返回完整的Product数据集(包括链接的实体),不只是ProductDetails。
Where(x => term >= x.MinTerm && term <= x.MaxTerm)
我可以通过首先引用ProductDetails并链接到其他表来解决如何操作,但不能在此配置中进行。有可能吗?
答案 0 :(得分:1)
如果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();