2010-01-25 6 views

답변

5

당신은 컴파일 전에 프롭퍼티 알고있는 경우 : (A의 예를 들어, 동적 정렬을

myList = myList.OrderBy(a=>a.propertyName).ToList(); 

또는

myList = (from m in myList order by m.propertyName).ToList(); 

당신이 컴파일시에 재산이없는 경우를 그리드 또는 무언가); 다음과 같은 확장 방법을 시도 : 이것은`경우 법적 할당되지

List<T> list = new List<T>(); 
//fill list here  
list.OrderBy(item => item.DoubleTypeProperty).ToList(); 

HTH

+0

나는 속성 이름을 알고있다. 그리고 나는 즉시 내 마음 속에 있었지만, OrderBy 함수가 없다는 문제가있다! –

+1

클래스의 맨 위에'using System.Linq' 문이 있다면,이게 작동합니다. –

+0

그래, 그 참조를 놓친 것 같습니다. 감사. –

1
var list = (from t in list 
      orderby t.doubleVal).ToList(); 
+0

:

myList = myList.OrderBy("propertyName", "ASC").ToList(); 
jason

+0

수정 해 주셔서 고맙습니다. 주로 C#의 구문 지식이 녹슬어졌습니다. 주로 VB.NET에 충실합니다. – Daniel

+0

당신의 대답은리스트를 정렬하지 않습니다.리스트의 정렬 된 버전을 얻기 위해 열거 될 수있는'IEnumerable '을 생성합니다. – jason

0

나는이 트릭을 할 sould 생각처럼

static class OrderByExtender 
{ 
    public static IOrderedEnumerable<T> OrderBy<T>(this IEnumerable<T> collection, string key, string direction) 
    { 
     LambdaExpression sortLambda = BuildLambda<T>(key); 

     if(direction.ToUpper() == "ASC") 
      return collection.OrderBy((Func<T, object>)sortLambda.Compile()); 
     else 
      return collection.OrderByDescending((Func<T, object>)sortLambda.Compile()); 
    } 

    public static IOrderedEnumerable<T> ThenBy<T>(this IOrderedEnumerable<T> collection, string key, string direction) 
    { 
     LambdaExpression sortLambda = BuildLambda<T>(key); 

     if (direction.ToUpper() == "ASC") 
      return collection.ThenBy((Func<T, object>)sortLambda.Compile()); 
     else 
      return collection.ThenByDescending((Func<T, object>)sortLambda.Compile()); 
    } 

    private static LambdaExpression BuildLambda<T>(string key) 
    { 
     ParameterExpression TParameterExpression = Expression.Parameter(typeof(T), "p"); 
     LambdaExpression sortLambda = Expression.Lambda(Expression.Convert(Expression.Property(TParameterExpression, key), typeof(object)), TParameterExpression); 
     return sortLambda; 
    } 
} 

그런 다음 주문 list`는`List `입니다; `Enumerable .OrderBy`의 반환 유형은`IEnumerable `입니다.

+0

ToList()를 잊어 버렸습니다. –

+1

이것은 목록을 정렬하지 않습니다. 그것은리스트의 정렬 된 버전을 얻기 위해 열거 될 수있는'IEnumerable '을 생성합니다. – jason

+0

@Jan - 결과에 따라 원하는 결과에 따라 달라집니다. –

관련 문제