2011-03-26 3 views
3

ValueInjecter를 사용하여 을 IQueryable<SimpleUser>으로 매핑해야합니다.ValueInjecter with IQueryable <T>

이것이 가능합니까?

내가 시도 :

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 
     }; 

하지만 매퍼 도구의 일종을 사용하여와

.

답변

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>(); 
+0

쿼리를 평가하기 전에 수행 할 수있는 방법이 있습니까? IQueryable을 사용하여 필터링, 페이징 및 정렬을 수행하는 표 컨트롤이 있습니다. –

+0

@Lol 코더 - 변환을 시도하기 전에 필터링, 정렬, 페이징을 수행해야합니다. 간단하고 단순한 변환은 SQL로 변환되지 않으므로 모든 객체가 메모리에 있어야 함을 의미하는 객체에 LINQ를 사용하여 변환해야합니다. SimpleUser에 해당하는보기를 매핑 할 수 있습니까? 그런 다음 필터링, 정렬, 페이징에 매개 변수를 전달할 수있는보기에 해당하는 SQL 함수를 설정할 수 있습니다. – tvanfosson

+0

@tvanfosson 나는 내가 원하는 것을 보여주기 위해 나의 질문을 편집했다. –

관련 문제