■ GroupBy 확장 메소드 : 객체 컬렉션의 특정 객체 속성 값의 집합 구하기 (속성 1개만 지정)

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

Program.cs

 

 

using System;

using System.ComponentModel;

using System.Collections.ObjectModel;

using System.Linq;

 

namespace TestProject

{

    /// <summary>

    /// 프로그램

    /// </summary>

    public class Program

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Private

 

        #region 프로그램 시작하기 - Main()

 

        /// <summary>

        /// 프로그램 시작하기

        /// </summary>

        private static void Main()

        {

            ObservableCollection<Employee> collection = Employee.GetCollection();

 

            Employee employee = collection.FirstOrDefault();

 

            if(employee != null)

            {

                PropertyDescriptorCollection propertyDescriptorCollection = TypeDescriptor.GetProperties(employee);

 

                PropertyDescriptor propertyDescriptor = propertyDescriptorCollection["Sex"];

 

                var result = collection.GroupBy(p => propertyDescriptor.GetValue(p))

                                       .Select(p => p.FirstOrDefault())

                                       .OrderBy(p => propertyDescriptor.GetValue(p));

 

                foreach(var item in result)

                {

                    Console.WriteLine((item as Employee).Sex);

                }

            }

        }

 

        #endregion

    }

}

 

 

Employee.cs

 

 

using System.Collections.ObjectModel;

 

namespace TestProject

{

    /// <summary>

    /// 직원

    /// </summary>

    public class Employee

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Property

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region ID - ID

 

        /// <summary>

        /// ID

        /// </summary>

        public string ID { get; set; }

 

        #endregion

 

        #region 성명 - Name

 

        /// <summary>

        /// 성명

        /// </summary>

        public string Name { get; set; }

 

        #endregion

 

        #region 성별 - Sex

 

        /// <summary>

        /// 성별

        /// </summary>

        public string Sex { get; set; }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Public

 

        #region 컬렉션 구하기 - GetCollection()

 

        /// <summary>

        /// 컬렉션 구하기

        /// </summary>

        /// <returns>컬렉션</returns>

        public static ObservableCollection<Employee> GetCollection()

        {

            ObservableCollection<Employee> collection = new ObservableCollection<Employee>();

 

            for(int i = 0; i < 100000; i++)

            {

                collection.Add

                (

                    new Employee()

                    {

                        ID   = i.ToString(),

                        Name = "직원" + i.ToString(),

                        Sex  = (i % 3 == 1 ? "남" : "여")

                    }

                );

            }

 

            return collection;

        }

 

        #endregion

    }

}

 

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

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요