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

728x90
반응형
using System;
using System.ComponentModel;
using System.Collections;
using System.Collections.ObjectModel;
using System.Linq;

#region 객체 컬렉션 특정 객체 속성 값의 집합 구하기 - GetDistinctValueCollection(sourceCollection, propertyName)

/// <summary>
/// 객체 컬렉션 특정 객체 속성 값의 집합 구하기
/// </summary>
/// <param name="sourceCollection">소스 컬렉션</param>
/// <param name="propertyName">속성명</param>
/// <returns>객체 컬렉션 특정 객체 속성 값의 집합</returns>
public ObservableCollection<object> GetDistinctValueCollection
(
    ObservableCollection<object> sourceCollection,
    string                       propertyName
)
{
    ObservableCollection<object> targetCollection = new ObservableCollection<object>();

    if(sourceCollection.Count == 0)
    {
        return targetCollection;
    }

    var sourceItem = sourceCollection.First();

    PropertyDescriptorCollection propertyDescriptorCollection = TypeDescriptor.GetProperties(sourceItem);

    PropertyDescriptor propertyDescriptor = propertyDescriptorCollection[propertyName];

    var result = sourceCollection.GroupBy(p => propertyDescriptor.GetValue(p))
                 .Select(p => p.FirstOrDefault())
                 .OrderBy(p => propertyDescriptor.GetValue(p));

    foreach(var item in result)
    {
        targetCollection.Add(propertyDescriptor.GetValue(item));
    }

    return targetCollection;
}

#endregion
728x90
반응형
Posted by 사용자 icodebroker
TAG , ,

댓글을 달아 주세요