本帖最后由 zhaoguangxu 于 2011-12-15 10:03:47 编辑

解决方案 »

  1.   

    T 和 DataRow  能对应上么能的话就用反射
      

  2.   

    加上new()约束就可以new了. 深度复制, 网上好像有类库可以这样做,可以找找.
      

  3.   

    /// <summary>
    /// 获取实体列表
    /// </summary>
    public static List<T> List<T>(T dbModel, string sql)
    {
    List<T> models = new List<T>();
    Type t = typeof(T);
    PropertyInfo[] pros = t.GetProperties(); using (SqlConnection connection = new SqlConnection(connectionString))
    {
    try
    {
    if (connection.State != ConnectionState.Open)
    {
    connection.Open();
    } using (SqlDataAdapter da = new SqlDataAdapter(sql, connection))
    {
    DataSet ds = new DataSet();
    da.Fill(ds, "ds");
    if (ds.Tables.Count > 0)
    {
    if (ds.Tables[0].Rows.Count > 0)
    {
    foreach (DataRow dr in ds.Tables[0].Rows)
    {
    Hashtable ht = new Hashtable();
    foreach (DataColumn dc in ds.Tables[0].Columns)
    {
    ht.Add(dc.ColumnName, dr[dc]);
    }
    foreach (PropertyInfo pro in pros)
    {
    if (ht.Contains(pro.Name))
    {
    if ((Object.Equals(ht[pro.Name], null)) || (Object.Equals(ht[pro.Name], System.DBNull.Value)))
    {
    pro.SetValue(dbModel, null, null);
    }
    else
    {
    pro.SetValue(dbModel, ht[pro.Name], null);
    }
    }
    }
    models.Add(dbModel);
    }
    }
    }
    }
    }
    catch (System.Data.SqlClient.SqlException e)
    {
    throw e;
    }
    catch (Exception ex)
    {
    throw ex;
    }
    }
    return models;
    }
    对的上~~~
      

  4.   


    public static List<T> List<T>(T model, DataTable dt) where T : new()
    {
    ...
      

  5.   

    不针对你的实现说的
    添加接口I实现深表复制,由各个可能传入的参数继承并实现
    T加约束I和NEW()