2016-09-11 3 views
0

OrderBy("Customer.CompanyName" + " " + sortDir)을 사용하면 오류가 사라지지만 모든 열을 정렬 할 수 없게되는 경우 Order 테이블에없는 열을 정렬하려고 할 때이 오류가 발생합니다. 아래에 사용 된 OrderBy 방법은 here에서 왔습니다.'속성 또는 필드가 없습니다'오류를 수정하는 방법?

문제점의 근원은 무엇입니까?

public ActionResult WebGrid(int page = 1, int rowsPerPage = 10, string sortCol = "OrderID", string sortDir = "ASC") 
    { 
     List<Order> res; 
     using (var nwd = new NorthwindEntities()) 
     { 
      var _res = nwd.Orders 
       .OrderBy(sortCol + " " + sortDir) 
       .Select(o => new Order 
       { 
        OrderID = o.OrderID, 
        OrderDate = o.OrderDate, 
        CompanyName = o.Customer.CompanyName, 
        FirstName = o.Employee.FirstName, 
        //...... 
        //...... 
        //...... 
       }); 

답변

3

링크를 제공하는 클래스는 internal로 표시된하고 코드에서 당신이 그것을 사용할 수 있도록, 그것은에서 정의 된 어셈블리 외부에서 사용할 수 없습니다.

이 API는 제품 인프라를 지원하며 사용자 코드에서 직접 사용 된 이 아닙니다. LinqDataSource 컨트롤의 값에서 새로운 클래스를 만드는 기능을 제공합니다. ,

.OrderBy(x=> x.sortCol + " " + x.sortDir) 

두 개의 기둥에 의해 주문하려는 경우 :

그래서 당신이 실제로 사용하려는 것은 다음과 같이 사용할 수 있습니다 System.Linq의 일부입니다 OrderByQueryable 내부 클래스입니다 다음을 사용할 수 있습니다 :

.OrderBy(x=> x.sortCol).ThenBy(x=> x.sortDir) 

동적으로 OrderBy 식을 지정하려면 가능한 각 매개 변수에 대해 switch 문을 수행하거나 이 SO Answer 동적 표현 트리를 만들 수 있습니다.

+0

도움 주셔서 감사합니다.하지만 동적 linq에서'ThenBy'를 사용할 수 없습니다. – Phantom

+1

이것 좀보세요 : http://stackoverflow.com/a/34908081/3185569 – user3185569

+0

도움을 주셔서 감사합니다! 나는 이것을 달성하기 위해 else if 문을 사용할 수 있음을 발견했다. – Phantom