본문 바로가기

Development/c#

C# DataTable을 ObjectEntity로 반환

반응형

많이 쓰는데..

프로젝트 때 마다 새로 만들어 쓰는거 같다. ㅡ.ㅡa

이젠 나이가 먹었나 할 때마다 생각이 안나고..

생각난 김에 만들어 놨다. ㅎㅎ

참조해서 사용 하세요


        
      /// <summary>
/// DataTable을 Entity List로 반환 합니다.
/// </summary>
/// <typeparam name="T">Entity Object</typeparam>
/// <param name="dt">변환할 DataTable</param>
/// <returns> 변환한 Object</returns>
private List<T> ConvertToEntityList<T>(DataTable dt)
{
    if (dt == null)
	return new List<T>();

    var columnNames = dt.Columns.Cast<DataColumn>()
	.Select(c => c.ColumnName.ToUpper())
	.ToList();

    var properties = typeof(T).GetProperties();

    return dt.AsEnumerable().Select(row =>
    {
	var objT = Activator.CreateInstance<T>();

	int i = 0;
	foreach (var pro in properties)
	{
	    if (columnNames.Contains(pro.Name.ToUpper()))
	    {
                // Property Type 이 Boolean 일 경우 , DB 에서 true 를 확인 하는 구문
		if (pro.PropertyType.Name == "Boolean")
		{
		    if (row[pro.Name.ToUpper()].ToString().Equals("true") || row[pro.Name.ToUpper()].ToString().Equals("1") )
			pro.SetValue(objT, true, null);
		    else
			pro.SetValue(objT, false, null);
		}
		else
		{
                    // 데이터가 DBNull 일 때 null로 변환
		    if (row[pro.Name.ToUpper()].GetType().Name.Equals("DBNull"))
		    {
			pro.SetValue(objT, null, null);
		    }
		    else
		    {
			pro.SetValue(objT, row[pro.Name.ToUpper()], null);
		    }
		    
		}
		i++;
	    }
	}
	return objT;
    }).ToList();
}


반응형