2010-04-15 8 views
4

입력 매개 변수에 따라 오름차순 또는 내림차순으로 정렬하는 LINQ to Entity 쿼리를 작성하고 싶습니다. 다음은 내 코드입니다. 제발 제안 해주세요.조건에 따라 내림차순으로 정렬

public List<Hosters_HostingProviderDetail> GetPendingApproval(SortOrder sortOrder) 
    { 
     List<Hosters_HostingProviderDetail> returnList = new List<Hosters_HostingProviderDetail>(); 
     int pendingStateId = Convert.ToInt32(State.Pending); 
     //If the sort order is ascending 
     if (sortOrder == SortOrder.ASC) 
     { 
      var hosters = from e in context.Hosters_HostingProviderDetail 
          where e.ActiveStatusID == pendingStateId 
          orderby e.HostingProviderName ascending 
          select e; 
      returnList = hosters.ToList<Hosters_HostingProviderDetail>(); 
      return returnList; 
     } 
     else 
     { 
      var hosters = from e in context.Hosters_HostingProviderDetail 
          where e.StateID == pendingStateId 
          orderby e.HostingProviderName descending 
          select e; 
      returnList = hosters.ToList<Hosters_HostingProviderDetail>(); 
      return returnList; 
     } 
    } 

답변

7

난 당신이 더 큰 쿼리에 조건을 넣을 수 있습니다 생각하지만, 당신이 할 수있는 것은 다음과 같이 또 다른 C#을 문으로 분리하지 않습니다

// Common code: 
var hosters = from e in context.Hosters_HostingProviderDetail 
       where e.ActiveStatusID == pendingStateId; 

// The difference between ASC and DESC: 
hosters = (sortOrder == SortOrder.ASC ? hosters.OrderBy(e => e.HostingProviderName) : hosters.OrderByDescending(e => e.HostingProviderName)); 

// More common code: 
returnList = hosters.ToList<Hosters_HostingProviderDetail>(); 
2

당신은 그것을 줄일 수 더 나아가는 단계

var hosters = from e in context.Hosters_HostingProviderDetail 
       where e.ActiveStatusID == pendingStateId 
       select e; 

if (sortOrder == SortOrder.ASC) 
    hosters = hosters.OrderBy(e => e.HostingProviderName); 
else 
    hosters = hosters.OrderByDescending(e => e.HostingProviderName); 

return hosters.ToList<Hosters_HostingProviderDetail>(); 
관련 문제