【发布时间】:2014-10-26 21:42:46
【问题描述】:
我有一个简单的Person View Model
public class PersonViewModel
{
public int ID {get;set;}
public String FirstName {get;set;}
public String LastName {get;set;}
}
视图包含三个字段
我的PersonService 中有这个函数,它使用注入的 EF6 数据上下文。
public IQueryable<Person> Search(Expression<Func<Person,bool>> predicate)
{
return dataContext.GetSet<Person>().Where(predicate);
}
现在我的 MVC 控制器实际上与 PersonViewModel class 一起工作
[HttpPost]
public ActionResult Search(PeopleSearchViewModel model)
{
if (ModelState.IsValid)
{
var listOfPersons= PersonService.Search(
//map viewmodel to model and search here)
//return the list and render a view etc...not important
}
}
所以我想知道的是,如果我能以某种方式获取 PersonViewModel,创建一个 Func<Person,bool> 谓词并将其传递给 PersonService 进行搜索,而不是使用 automapper 将我的视图模型映射到领域模型?
谢谢
【问题讨论】:
-
它将无法正常工作,因为您将
Func<>发送到Where方法,然后所有过滤都将在.Net 端完成,整个表将从坏的DB 加载。应该是Expression<Func<Person, bool>> -
对不起,我错过了,我已经更新了代码——虽然我不确定这是否是你的意思。
-
是的,我是认真的。嗯,
Search方法用于过滤。它不需要Person类的真实实例,那么你的问题是什么?您想使用PersonSearchViewModel进行Search过滤吗?