첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ 객체 리스트 특정 속성 값에 따라 정렬하기 (속성 1개만 지정)

----------------------------------------------------------------------------------------------------

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Reflection;

 

#region 객체 리스트 특정 속성 값에 따라 정렬하기 (속성 1개만 지정) - SortList<TSource>(sourceList, propertyName,

    sortDirection)

 

/// <summary>

/// 객체 리스트 특정 속성 값에 따라 정렬하기 (속성 1개만 지정)

/// </summary>

/// <typeparam name="TSource">소스 타입</typeparam>

/// <param name="sourceList">소스 리스트</param>

/// <param name="propertyName">속성명</param>

/// <param name="sortDirection">정렬 방향</param>

/// <returns>정렬 객체 리스트</returns>

public List<TSource> SortList<TSource>(List<TSource> sourceList, string propertyName, string sortDirection)

{

    int reverser = sortDirection.ToLower().StartsWith("asc") ? 1 : -1;

 

    Comparison<TSource> comparison = new Comparison<TSource>

    (

        delegate(TSource x, TSource y)

        {

            MethodInfo methodInfo = GetCompareToMethodInfo<TSource>(x, propertyName);

 

            object xValue = x.GetType().GetProperty(propertyName).GetValue(x, null);

            object yValue = y.GetType().GetProperty(propertyName).GetValue(y, null);

 

            object result = methodInfo.Invoke(xValue, new object[] { yValue });

 

            return reverser * Convert.ToInt16(result);

        }

    );

 

    sourceList.Sort(comparison);

 

    return sourceList;

}

 

#endregion

 

#region CompareTo 메소드 정보 구하기 - GetCompareToMethodInfo<T>(sourceObject, propertyName)

 

/// <summary>

/// CompareTo 메소드 정보 구하기

/// </summary>

/// <typeparam name="TSource">소스 타입</typeparam>

/// <param name="sourceObject">소스 객체</param>

/// <param name="propertyName">속성명</param>

/// <returns>CompareTo 메소드 정보</returns>

private MethodInfo GetCompareToMethodInfo<TSource>(TSource sourceObject, string propertyName)

{

    Type sourceType = sourceObject.GetType();

 

    object propertyValue = sourceType.GetProperty(propertyName).GetValue(sourceObject, null);

 

    Type propertyType = propertyValue.GetType();

 

    MethodInfo methodInfo = propertyType.GetMethod("CompareTo", new Type[] { propertyType });

 

    return methodInfo;

}

 

#endregion

----------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요