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

■ List<T> 클래스 : 데이터 테이블 구하기

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

using System;

using System.Collections.Generic;

using System.Data;

using System.Reflection;

 

#region 데이터 테이블 구하기 - GetDataTable<T>(list)

 

/// <summary>

/// 데이터 테이블 구하기

/// </summary>

/// <typeparam name="T">리스트 타입</typeparam>

/// <param name="list">리스트</param>

/// <returns>데이터 테이블</returns>

public DataTable GetDataTable<T>(List<T> list)

{

    DataTable targetTable = new DataTable();

 

    foreach(PropertyInfo propertyInfo in typeof(T).GetProperties())

    {

        targetTable.Columns.Add(new DataColumn(propertyInfo.Name, GetNullableType(propertyInfo.PropertyType)));

    }

 

    foreach(T item in list)

    {

        DataRow dataRow = targetTable.NewRow();

 

        foreach(PropertyInfo propertyInfo in typeof(T).GetProperties())

        {

            if(!IsNullableType(propertyInfo.PropertyType))

            {

                dataRow[propertyInfo.Name] = propertyInfo.GetValue(item, null);

            }

            else

            {

                dataRow[propertyInfo.Name] = (propertyInfo.GetValue(item, null) ?? DBNull.Value);

            }

        }

 

        targetTable.Rows.Add(dataRow);

    }

 

    return targetTable;

}

 

#endregion

 

#region 널 가능 타입 구하기 - GetNullableType(sourceType)

 

/// <summary>

/// 널 가능 타입 구하기

/// </summary>

/// <param name="sourceType">소스 타입</param>

/// <returns>널 가능 타입</returns>

private static Type GetNullableType(Type sourceType)

{

    Type targetType = sourceType;

 

    if(sourceType.IsGenericType && sourceType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))

    {

        targetType = Nullable.GetUnderlyingType(sourceType);

    }

 

    return targetType;

}

 

#endregion

 

#region 널 가능 타입 여부 구하기 - IsNullableType(sourceType)

 

/// <summary>

/// 널 가능 타입 여부 구하기

/// </summary>

/// <param name="sourceType">소스 타입</param>

/// <returns>널 가능 타입 여부</returns>

private bool IsNullableType(Type sourceType)

{

    return (sourceType == typeof(string) || sourceType.IsArray ||

       (sourceType.IsGenericType && sourceType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))));

}

 

#endregion

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

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요