C\#DataTable 을 List 로 변환 합 니 다.

3 층 구 조 를 이용 하여 웹 사 이 트 를 개발 할 때 DataTable 대상 을 List대상 으로 전환 하고 자 인터넷 에서 자 료 를 찾 아 비교적 편리 한 방법 을 정리 하여 반 사 를 실현 한다.
생각:
List대상 을 초기 화하 여 T 의 모든 속성 을 가 져 옵 니 다.T 대상 이 모든 속성 을 옮 겨 다 니 는 것 을 초기 화 합 니 다.DataTable 에 해당 하 는 속성 이 있 는 값 은 T 대상 에 값 을 부여 합 니 다.해당 하 는 열 이 없 으 면 데이터 모델 의 정의 가 잘못 되 었 는 지 확인 합 니 다.(속성 이름과 열 이름 을 비교 할 때 대소 문 자 를 구분 하지 않 음)T 대상 을 List대상 에 추가 합 니 다.
전체 코드:

획득 한 속성 정보 반사

DataTable 의 열 정 보 는 위의 그림 과 비교 하면 속성 중의 이니셜 은 모두 대문자 이 고 열 이름 은 Camel 이름 이 며 이니셜 은 소문 자 이지 만 한 단계 디 버 깅 을 통 해 dt.Columns.Contanis(tempName)의 반환 값 이 true 라 는 것 을 알 수 있 습 니 다.이 를 통 해 비교 할 때 대소 문 자 를 구분 하지 않 는 다 는 것 을 증명 할 수 있 습 니 다.

T 개체 정보 가 져 오기

/// <summary> 
    ///      DataTable   List<T>  
    /// </summary> 
    /// <param name="dt">DataTable   </param> 
    /// <returns>List<T>  </returns> 
    public static List<T> DataTableToList<T>(DataTable dt) where T :class,new ()
    { 
      //      
      List<T> ts = new List<T>(); 
      //         
      string tempName = string.Empty; 
      //  DataTable        
      foreach (DataRow dr in dt.Rows) 
      { 
        T t = new T(); 
        //            
        PropertyInfo[] propertys = t.GetType().GetProperties(); 
        //           
        foreach (PropertyInfo pi in propertys) 
        { 
          tempName = pi.Name;//             
          //  DataTable      (  ==      )  
          if (dt.Columns.Contains(tempName)) 
          { 
            //   
            object value = dr[tempName];
             //    ,         
             if (value != DBNull.Value)
             {
               pi.SetValue(t,value,null); 
             }  
          } 
        } 
        //           
        ts.Add(t); 
      } 
      return ts; 
    }

좋은 웹페이지 즐겨찾기