0
我使用DTO來通過存儲庫模式在我的業務和實體框架圖層之間進行映射。使用通用謂詞的實體框架
的一個標準調用看起來像
public IClassDTO Fetch(Guid id)
{
var query = from s in _db.Base.OfType<Class>()
where s.ID == id
select s;
return query.First();
}
現在,我想在過濾條件通過從業務層,所以我嘗試
public IEnumerable<IClassDTO> FetchAll(ISpecification<IClassDTO> whereclause)
{
var query = _db.Base.OfType<Class>()
.AsExpandable()
.Where(whereclause.EvalPredicate);
return query.ToList().Cast<IClassDTO>();
}
從業務層的調用會是這樣的
Specification<IClassDTO> school =
new Specification<IClassDTO>(s => s.School.ID == _schoolGuid);
IEnumerable<IClassDTO> testclasses = _db.FetchAll(school);
我遇到的問題是EF查詢中的.WHER子句不能從使用中推斷出來。如果我在Expression中使用具體類型,那麼它可以找到,但我不想直接將我的業務層展示給EF。