首先,我使用Telerik MVC Grid来显示数据。网格期望IEnumerable被传递到他们的GridModel类中,我假定需要照顾页面,排序,过滤等。使用AutoMapper将LINQ查询结果映射到ViewModel对象
为了避免通过ajax将这些数据作为JSON传递时的循环引用,我需要映射来自我的结果EF linq查询查看模型对象... AutoMapper将成为我的首选方法,但涉及AutoMapper的唯一解决方案我遇到了非常糟糕的伤害性能问题。
我有一个返回我的视图模型类型的IEnumerable到由网格打电话给我的操作方法的存储库..
public IEnumerable<ResultViewModel> Search()
{
var person = _context.Persons;
//this works and is the best performance wise but could be made simpler with automapper
var result = person.Select(x => new ResultViewModel
{
FirstName = x.firstName,
LastName = x.lastName,
///etc...
});
//THIS IS SLOW but works
//var result = Mapper.Map<IEnumerable<Person>, IEnumerable<ResultViewModel>>(person);
//this does not work and errors at runtime
//var result = person.Select(x => Mapper.Map<Person, ResultViewModel>(x));
return result;
}
如何保持自己的表现,同时使用automapper把事情任何想法更轻松。我假设使用automapper的缓慢版本是由列举的person
集合引起的......然后由电子网格进行解析
你用'person.Select(x => Mapper.Map(x))'得到了什么错误? –
smartcaveman
2011-04-07 19:09:56
@smartcaveman错误是:LINQ to Entities无法识别方法....,并且此方法无法转换为商店表达式 – stephen776 2011-04-08 11:18:01
这意味着'IQueryable'尚未评估。 jfar的答案应该可以工作 – smartcaveman 2011-04-08 16:19:42