具有IQueryable <t> </t>的ValueInjecter

时间:2011-03-26 16:51:58

标签: asp.net-mvc automapper valueinjecter

我需要使用ValueInjecter将IQueryable<User>映射到IQueryable<SimpleUser>

这可能吗?

我试过了:

return userRepo.GetUsers()
               .Select(o => new SimpleUser().InjectFrom(o))
               .Cast<SimpleUser>();

但这不能转换为存储的表达式......好吧,方法InjectFrom

可以自动化吗?

我想要类似的东西:

return from i in userRepo.GetUsers()
      select new SimpleUser{
            i.UserId,
            i.Name
      };

但使用某种映射工具。

1 个答案:

答案 0 :(得分:4)

在执行选择之前将集合转换为对象,它应该可以工作。 已更新,使用PredicateBuilder显示过滤和分页,Dynamic LINQ进行排序。

var predicate = new PredicateBuilder<User>.True();
if (!string.IsNullOrEmpty( typeFilter ))
{
    predicate = predicate.And( u => u.Type == typeFilter );
}
if (!string.IsNullOrEmpty( nameFilter ))
{
    predicate = predicate.And( u => u.Name.StartsWith( nameFilter ));
}

// assumes sortColumn matches one of your user properties and
// sortDirection is either "ASC" or "DESC"
string sortOrder = string.Format( "{0} {1}", sortColumn, sortDirection ); 

return userRepo.GetUsers()
               .Where( predicate )
               .OrderBy( sortOrder )
               .Skip( (page-1) * usersPerPage )
               .Take( usersPerPage )
               .ToList()  // force the query and make these objects
               .Select(o => new SimpleUser().InjectFrom(o))
               .Cast<SimpleUser>();