2015-02-04 3 views
0

다른 기능으로 전달하기 전에 엔티티에서 일부 데이터를 정렬하려고합니다. tableName과 columnName은 모두 동적으로 선택됩니다. 이것은 내가하고있는 것입니다 :OrderBy with Dynamic Linq

string tableName = cboSelectTable.Text.ToString(); 
var comboBoxColumn = from a in Context.RULES where 
        a.ISCOMBOBOXCOLUMN == "Y" select a.COLUMN; 

foreach (var colName in comboBoxColumn) 
    { 
    var getTableName = entityModel.GetType() 
            .GetProperty(tableName) 
            .GetValue(entityModel, null); 
    var getData = ((IQueryable<object>)getTableName) 
             .Where(colName + "!=null") 
             .Select(colName) 
             .Distinct() 
             .OrderBy('"'+ colName +'"'); 
    dgvCboColumn(getData, colName); 
    } 

그러나 이것은 데이터를 정렬하지 않습니다. 나는 또한 다른 방법들도 시도했지만 그것을 이해할 수 없었다. 이 문제를 어떻게 해결할 수 있습니까?

+0

당신이'.OrderBy (colName 사용)'시도해 봤어 :

또는, 현재 인스턴스를 참조 할 수 있습니다? –

+0

예, 열 이름이 String [at index 0]에 존재하지 않는다는 예외가 발생합니다. – Paradox

답변

0

당신은 단순히 Select OrderBy 애프터 배치 할 수 있습니다. (어떤 이유로 작동하지 않는 것 같습니다).

var getData = ((IQueryable<object>)getTableName) 
        .Where(colName + "!=null") 
        .Select(colName) 
        .Distinct() 
        .OrderBy("it"); 
+0

데이터를 정렬하지 않고 정렬되지 않은 데이터의 목록을 제공합니다. 이전과 동일합니다. – Paradox

+0

이상한. 두 가지 방법 모두 시도 했습니까? –

+0

죄송합니다. 귀하의 업데이트를 알 수 없습니다. 두 번째 접근 방식은 작동합니다. – Paradox

0

나는 그런 식으로 생각하지 않습니다. 오더 (...)가 작동합니다. 속성으로 주문하십시오 :

SomeList.OrderBy(l => l.SomeAttribute); 

내가 이렇게 모든 주문하지, 같은 속성에 의해 지시 된 각 요소의 문자열 결과에 의해 순서를 생각한다. 또한 where 절이 그렇게 작동하면 확실하지 않습니다.

이미 관련되어있는 다른 관련 질문이 있습니다. 당신은 그것을보고를 할 수 있습니다 :

var getData = ((IQueryable<object>)getTableName) 
        .Where(colName + "!=null") 
        .OrderBy(colName) 
        .Select(colName) 
        .Distinct(); 

이 당신이 열 이름을 참조 할 수 있습니다 : click me!

+0

LINQ 위에 작은 라이브러리 인 System.Linq.Dynamic을 사용하고 있습니다. 이것이 문자열에 의한 순서가 작동하는 이유이며, 제공된 속성 이름으로 정렬됩니다. –

+0

감사합니다. 나는 그 차이를 알지 못했다. – Nephtyz

+0

이 경우에는 (l => l.someCol)을 사용할 수 없습니다. – Paradox