LzmTW.uSystem.uReflection+DatasFunction

Author:水如烟  

Imports  LzmTW.uSystem.uReflection.MemberInfoFunction

Namespace  LzmTW.uSystem.uReflection

    
Public   Class  DatasFunction

        
Private   Sub   New ()
        
End Sub

        
Public   Shared   Function  CreateTableFromType( ByVal  t  As  Type)  As  DataTable
            
Dim  tmpTable  As   New  DataTable

            
If  TypeHasFields(t)  Then
                
For   Each  f  As  Reflection.FieldInfo  In  t.GetFields
                    tmpTable.Columns.Add(f.Name, f.FieldType)
                
Next
            
Else
                
For   Each  p  As  Reflection.PropertyInfo  In  t.GetProperties
                    
If  p.CanRead  Then  tmpTable.Columns.Add(p.Name, p.PropertyType)
                
Next
            
End   If

            
Return  tmpTable
        
End Function

        
Public   Shared   Function  ItemToDataRow( Of  T)( ByVal  item  As  T,  ByVal  table  As  DataTable)  As  DataRow
            
Dim  tmpRow  As  DataRow  =  table.NewRow

            
Dim  mName  As   String
            
Dim  mtype  As  Type  =   GetType (T)

            
For   Each  c  As  DataColumn  In  table.Columns
                mName 
=  c.ColumnName
                
Dim  obj  As   Object

                
If  TypeHasFields(mtype)  Then
                    obj 
=  GetFieldResult(item, mName)
                
Else
                    obj 
=  GetPropertyResult(item, mName,  Nothing )
                
End   If

                
If  obj  Is   Nothing   Then  obj  =  DBNull.Value

                tmpRow(mName) 
=  obj
            
Next

            
Return  tmpRow
        
End Function

        
Public   Shared   Sub  ItemAppendToTable( Of  T)( ByVal  item  As  T,  ByVal  table  As  DataTable)
            table.Rows.Add(ItemToDataRow(
Of  T)(item, table))
        
End Sub

        
Public   Shared   Sub  ItemAppendToTable( Of  T)( ByVal  items()  As  T,  ByVal  table  As  DataTable)
            
For   Each  item  As  T  In  items
                ItemAppendToTable(
Of  T)(item, table)
            
Next
        
End Sub

        
Public   Shared   Function  ItemsToTable( Of  T)( ByVal  items()  As  T)  As  DataTable
            
Dim  mTable  As  DataTable  =  CreateTableFromType( GetType (T))

            
If  items  Is   Nothing   Then   Return  mTable

            ItemAppendToTable(
Of  T)(items, mTable)

            
Return  mTable
        
End Function

        
' '' <summary>
         ' '' 要求T有New()构造函数
         ' '' </summary>
         Public   Shared   Function  DataRowToItem( Of  T)( ByVal  row  As  DataRow)  As  T
            
Dim  mType  As  Type  =   GetType (T)
            
Dim  mResult  As  T  =   CType (System.Activator.CreateInstance(mType), T)

            
Dim  mName  As   String

            
If  TypeHasFields(mType)  Then
                
For   Each  c  As  DataColumn  In  row.Table.Columns
                    mName 
=  c.ColumnName
                    SetFieldValue(mResult, mName, row(mName))
                
Next
            
Else
                
For   Each  c  As  DataColumn  In  row.Table.Columns
                    mName 
=  c.ColumnName
                    SetPropertyValue(mResult, mName, row(mName), 
Nothing )
                
Next
            
End   If

            
Return  mResult
        
End Function

        
Public   Shared   Function  TableToItems( Of  T)( ByVal  table  As  DataTable)  As  T()
            
Dim  mItems(table.Rows.Count  -   1 As  T
            
For  i  As   Integer   =   0   To  table.Rows.Count  -   1
                mItems(i) 
=  DataRowToItem( Of  T)(table.Rows(i))
            
Next
            
Return  mItems
        
End Function
    
End Class

End Namespace

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值