我有一个关于Entity Framework4,Lambda表达式和数据传输对象(DTO)的半复杂问题.
所以我有一个小的EF4项目,并遵循既定的OO原则,我有一个DTO,在数据使用者(GUI)和数据模型之间提供一层抽象.
我的问题围绕着GUI使用DTO(并没有让GUI完全使用Entity),并且需要将lambda传递给数据层.我的数据层是Add的基本存储库模式.更改,删除,获取,获取列表等.尝试使用如下签名实现Find方法:
public IEnumerable<VideoDTO> Find(Expression<Func<VideoEntity, bool>> exp)
...
_dataModel.Videos.Where(exp).ToList<Video>()
---
Run Code Online (Sandbox Code Playgroud)
我的问题/关注点是"exp"需要是VideoEntity而不是VideoDTO.我想保留关注点的分离,以便GUI不知道Entity对象.但是,如果我试图传入
Func<VideoDTO, bool>
Run Code Online (Sandbox Code Playgroud)
然后我不能使用实际的数据模型在那个表达式上做LINQ.
有没有办法将a转换Func<VideoDTO,bool>为aFunc<VideoEntity, bool>
理想情况下,我的方法签名会接受Func<VideoDTO, bool>,这样GUI就不会引用底层数据实体.
这够清楚了吗?谢谢你的帮助
谢谢你们两个人的代表.
我将尝试在对象中定义搜索条件并在LINQ表达式中使用它.刚开始使用EF4和L2S,将其作为学习项目.
再次感谢!