ValueInjecter с IQueryable <T> - PullRequest
       58

ValueInjecter с IQueryable <T>

3 голосов
/ 26 марта 2011

Мне нужно сопоставить IQueryable<User> с IQueryable<SimpleUser> с помощью ValueInjecter.

Возможно ли это?

Я пытался:

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

Но это не может быть переведенов сохраненное выражение ... ну, метод InjectFrom.

Может ли это делать с помощью autopper?

Я хочу что-то похожее на это:

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

, но сиспользуя какой-то инструмент картографирования.

1 Ответ

4 голосов
/ 26 марта 2011

Преобразуйте коллекцию в объекты, прежде чем делать выбор, и она должна работать. Обновлено с использованием PredicateBuilder для отображения фильтрации и подкачки и Динамический 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>();
...