2009-11-11 5 views
1
var sortQ = filterQ; // <--- update 

if (iSortingCols > 0) 
{ 
    sortQ = (sortDirs[0] == "asc") ? 
     sortQ.OrderBy((d) => d.GetColumnData()[sortCols[0]]) : 
     sortQ.OrderByDescending((d) => d.GetColumnData()[sortCols[0]]); 

    if (iSortingCols > 1) 
    { 
     for (int i = 1; i < iSortingCols; i++) 
     { 
      sortQ = (sortDirs[i] == "asc") ? 
       sortQ.ThenBy(d => d.GetColumnData()[sortCols[i]]) : 
       sortQ.ThenByDescending(d => d.GetColumnData()[sortCols[i]]); 

     } 
    } 
} 

컴파일러 말 루프의 내부 삼항 연산자의 두 결과를 강조하는 IEnumerable을 < ...> (유사 ThenByDescending에 대한) ThenBy라는 메서드 오버로드가 없습니다, sortQ는 해당 블록에 IOrderedEnumerable < ...이됩니다. C# 형식 유추가 왜 그렇게 선택되지 않습니까?형식 유추가

업데이트 : 나는 내가 IEnumerable을 <로 sortQ를 입력 유형의 추론 엔진을 강제로 다른 쿼리의 결과에 sortQ를 할당 한 것이 었습니다 원래 조각에서 제외 무엇을하기 전에 혼동되었을 수 있습니다 사람들을위한 ..>, 물론 내 견본을 망쳐 놓은 것입니다. 아래 답변은이 문제를 해결하는 방법입니다. @Marc 덕분에 줄 사이를 읽을 수 있습니다.

답변

2

나는 sortQIEnumerable<T> 인 것으로 추측하고 있습니다. ThenBy을 사용하려면 IOrderedEnumerable<T>이 필요합니다. 다행히도 처음으로 OrderBy이이를 반환하므로 다음 내용을 확인하십시오.

var result = (sortDirs[0] == "asc") ? 
    sortQ.OrderBy((d) => d.GetColumnData()[sortCols[0]]) : 
    sortQ.OrderByDescending((d) => d.GetColumnData()[sortCols[0]]); 

if (iSortingCols > 1) 
{ 
    for (int i = 1; i < iSortingCols; i++) 
    { 
     result = (sortDirs[i] == "asc") ? 
      result.ThenBy(d => d.GetColumnData()[sortCols[i]]) : 
      result.ThenByDescending(d => d.GetColumnData()[sortCols[i]]); 

    } 
} 
+0

Doh! 네가 옳아. 나는 sortQ에 대한 이전 과제에 대해서 생각조차하지 않았다. 잘 했어. –