110,549
社区成员
发帖
与我相关
我的任务
分享
public static T DataRowToT<T>(DataRow source) where T : class,new()
{
T item = null;
if (source == null)
{
return item;
}
item = new T();
Type targettype = typeof(T);
Type ptype = null;
Object value = null;
foreach (PropertyInfo pi in targettype.GetProperties())
{
if (pi.CanWrite && source.Table.Columns.Contains(pi.Name))
{
ptype = Type.GetType(pi.PropertyType.FullName);
if (!(pi.PropertyType.FullName == "System.Byte[]" && source[pi.Name] == System.DBNull.Value))
{
value = Convert.ChangeType(source[pi.Name], ptype);
pi.SetValue(item, value, null);
}
}
}
return item;
}
var cmd = dbconn.CreateCommand();
cmd.CommandText = $"select Id, UserName,UserCode,UserNumber from User";
using (var reader = cmd.ExecuteReader())
{
var lst = (from IDataRecord x in reader
select new MyDataType
{
Id = (string)x[0],
Name = (string)x[1],
ShenFenZheng = x[2] == DBNull.Value ? null : (string)x[2],
Number = x[3] == DBNull.Value ? 0 : (int)x[3]
}).ToList();
proc(lst);
}
var cmd = dbconn.CreateCommand();
cmd.CommandText = $"select Id, UserName,UserCode from UscUser";
using (var reader = cmd.ExecuteReader())
{
var lst = (from IDataRecord x in reader
select new MyDataType
{
Id = (string)x[0],
Name = (string)x[1],
ShenFenZheng = (string)x[2],
Number = x[3] == DBNull.Value ? 0 : (int)x[3]
}).ToList();
proc(lst);
}
这里,对于不可能为空的字段就不处理了,但是对于可能为空的字段(Number)就需要判断是否为空,为空就应该进行特殊处理。