将数据集结果存储在IList中



如何将数据集的结果存储在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();

注意:这有点片状,效率不高,但无论如何,它就是这样!

最新更新