2010-01-11 1 views
0

(웹) GridView에 대한 객체 데이터 소스로 linq-to-sql과 함께 저장소 클래스를 사용하고 있습니다. GridView는 모든 열을 정렬 할 수 있어야합니다. this approach을 사용하는 작업 솔루션이 있지만 미리 정의 된 정렬 식 목록없이이 작업을 수행하는 것이 좋습니다.linq-to-sql 쿼리에서 사용자 지정 반환 형식에 대한 정렬을 구현하는 방법은 무엇입니까?

public class TrailerMovementRepository 
{ 
    private TrailerMovementDataContext db = new TrailerMovementDataContext(); 

    public IOrderedEnumerable<TrailerMovementHistory> GetTrailerMovementHistoryByDepotAndDate(string depot, DateTime searchDate, string sortExpression) 
    { 
     var unorderedQuery = (from tm in db.TrailerMovements 
       where tm.Depot == depot && tm.Date_In == searchDate && tm.Time_Out != null    
       select new TrailerMovementHistory 
       { 
        Depot = tm.Depot, 
        TrailerNumber = tm.Trailer, 
        TimeIn = tm.Time_In, 
        TimeOut = tm.Time_Out, 
        VOR = tm.VOR.Value, 
        Contents = tm.Contents, 
        Supplier = tm.Supplier, 
        TurnaroundTime = FormatDuration(tm.Time_Out - tm.Time_In), 
        VORTime = FormatDuration(tm.VOnR_Date - tm.VOffR_Date), 
        LoadedTime = tm.LoadedTime, 
        Destination = tm.Destination 
       }).ToList<TrailerMovementHistory>(); 

     //need to find a way to dynamically do this from the passed in expression 
     IOrderedEnumerable<TrailerMovementHistory> orderedQuery = unorderedQuery.OrderBy(t => t.TrailerNumber); 

     switch (sortExpression) 
     { 
      case "TrailerNumber DESC": 
       orderedQuery = unorderedQuery.OrderByDescending(t => t.TrailerNumber); 
       break; 
      case "TimeIn": 
       orderedQuery = unorderedQuery.OrderBy(t => t.TimeIn); 
       break; 
      case "TimeIn DESC": 
       orderedQuery = unorderedQuery.OrderByDescending(t => t.TimeIn); 
       break; 

      ...etc... 

      default: 
       break; 
     } 
     return orderedQuery; 
    } 

    public class TrailerMovementHistory 
    { 
     public TrailerMovementHistory() 
     { } 
     public String Depot { get; set; } 
     public String TrailerNumber { get; set; } 
     public DateTime? TimeIn { get; set; } 
     public DateTime? TimeOut { get; set; } 
     public Boolean VOR { get; set; } 
     public String Contents { get; set; } 
     public String Supplier { get; set; } 
     public String TurnaroundTime { get; set; } 
     public String VORTime { get; set; } 
     public DateTime? LoadedTime { get; set; } 
     public String Destination { get; set; } 

    } 
} 

답변

0

당신은 체크 아웃 할 수 있습니다 SO