尝试使用Entity Framework实现正确的存储库模式时,我在使用let语句时遇到了一些问题。我的目标是:
然而,这样做破坏了使用存储库模式的任何意义。当我搜索答案时,人们说要将其放在单独的查询中并从内存中引用它,但由于我实际上在let语句中拥有客户端的Id(
有没有什么聪明的方法来规避这个问题?
var customer = (from cus in Customers.GetAll()
let brokerExists = InsuredBrokers.GetAll().Any(ib => ib.INS_Id == cus.INS_Id)
// ... more stuff
但是这会给我一个错误
System.NotSupportedException:“LINQ to Entities不识别方法'System.Linq.IQueryable`1[SNIP.DataModel.EA_INB_InsuredBrokers_TB] GetAll()'方法,此方法无法转换为存储表达式。”
我可以做的是:
var customer = (from cus in Customers.GetAll()
let brokerExists = _context.Set<EA_INB_InsuredBrokers_TB>().Any(ib => ib.INS_Id == cus.INS_Id)
// ... more stuff
然而,这样做破坏了使用存储库模式的任何意义。当我搜索答案时,人们说要将其放在单独的查询中并从内存中引用它,但由于我实际上在let语句中拥有客户端的Id(
INS_Id
),所以我无法这样做。
GetAll()
类似于:public IQueryable<T> GetAll()
{
return _context.Set<T>().AsQueryable();
}
有没有什么聪明的方法来规避这个问题?
Customers
是你的仓储实例吗? - Mafiilet brokerExists = cus.Broker != null
或者let brokerExists = cus.Brokers.Any()
这样的语句。 - Gert Arnold