将数据集结果存储在IList中

时间:2012-03-27 17:57:50

标签: c# sql asp.net-mvc

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

1 个答案:

答案 0 :(得分:5)

像这样的东西会做你想要的我认为......

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();

注意:这有点不稳定而且效率不高但无论如何,它就是它!