如何将数据集的结果存储在Ilist中?
Model read = new Model()
IList<sqlprop> sqlprop= read.readrows("SELECT * FROM test").Tables[0].Cast<DataRow>().ToList();
Class Model
{
public DataSet readrows(string query)
{
............
return dataset;
}
}
Class sqlprop
{
string data1 get;set;
string data2 get;set;
.........
}
这样的东西可以随心所欲,我想。。。
List<sqlprop> sqlprop= read
.readrows("SELECT * FROM test")
.Tables[0]
.Rows
.Cast<DataRow>()
.Select(r => new sqlprop
{
data1 = r.GetString(0),
data2 = r.GetString(1)
})
.ToList();
您应该检查DBNull.Value,并可能在SQL查询中包括列名等,但您已经知道了。
更新
如果你需要它是通用的,并且数据库中的列名与属性名完全匹配,你可以这样做(未经测试,我这里没有编译器,但它应该会给你这个想法):
List<sqlprop> sqlprop= read
.readrows("SELECT * FROM test")
.Tables[0]
.Rows
.Cast<DataRow>()
.Select(r => {
var ret = new sqlprop();
foreach (var p in ret.GetType().GetProperties())
{
object val = r[r.Table.Columns.IndexOf(p.Name)];
if (val != DBNull.Value)
{
p.SetValue(ret, val, null);
}
}
return ret;
})
.ToList();
注意:这有点片状,效率不高,但无论如何,它就是这样!