【发布时间】:2009-12-14 06:13:43
【问题描述】:
我使用 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 查询中的 .Where 子句无法从用法中推断出来。如果我在表达式中使用具体类型,那么它可以找到,但我不想将我的业务层直接暴露给 EF。
【问题讨论】:
标签: entity-framework lambda repository-pattern