C# 将数据集结果存储在IList中

C# 将数据集结果存储在IList中,c#,sql,asp.net-mvc,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) { ............

如何将数据集的结果存储在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;
.........
}
Model read=new Model()
IList sqlprop=read.readrows(“从测试中选择*)。表[0]。Cast().ToList();
类模型
{
公共数据集读取行(字符串查询)
{
............
返回数据集;
}
}
类sqlprop
{
字符串data1get;set;
字符串数据2获取;设置;
.........
}

像这样的东西可以满足你的需要,我想

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();
List sqlprop=read
.readrows(“从测试中选择*)
.表格[0]
.行
.Cast()
.选择(r=>newsqlprop
{
data1=r.GetString(0),
data2=r.GetString(1)
})
.ToList();
您应该检查DBNull.Value,并可能在SQL查询中包含列名等,但是您知道了

更新

如果您需要它是泛型的,并且数据库中的列名与属性名完全匹配,您可以执行类似的操作(未经测试,我这里没有编译器,但它应该能让您了解):

List sqlprop=read
.readrows(“从测试中选择*)
.表格[0]
.行
.Cast()
.选择(r=>{
var ret=new sqlprop();
foreach(ret.GetType().GetProperties()中的var p)
{
object val=r[r.Table.Columns.IndexOf(p.Name)];
if(val!=DBNull.Value)
{
p、 设置值(ret、val、null);
}
}
返回ret;
})
.ToList();

注意:这是一个有点片状,并没有超高效率,但无论如何,它是

像这样的东西可以满足你的需要,我想

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();
List sqlprop=read
.readrows(“从测试中选择*)
.表格[0]
.行
.Cast()
.选择(r=>newsqlprop
{
data1=r.GetString(0),
data2=r.GetString(1)
})
.ToList();
您应该检查DBNull.Value,并可能在SQL查询中包含列名等,但是您知道了

更新

如果您需要它是泛型的,并且数据库中的列名与属性名完全匹配,您可以执行类似的操作(未经测试,我这里没有编译器,但它应该能让您了解):

List sqlprop=read
.readrows(“从测试中选择*)
.表格[0]
.行
.Cast()
.选择(r=>{
var ret=new sqlprop();
foreach(ret.GetType().GetProperties()中的var p)
{
object val=r[r.Table.Columns.IndexOf(p.Name)];
if(val!=DBNull.Value)
{
p、 设置值(ret、val、null);
}
}
返回ret;
})
.ToList();

注意:这是一个有点片状,并没有超高效率,但无论如何,它是

您的意思是“如何将
DataRow
转换为
sqlprop
”?不清楚您的意思,并且您的代码示例存在很多问题,模糊了示例的意图。是的,将DataRow转换为sqlprop。请问,我是否回答了您下面的问题(最终)?如果是,您可以将其标记为已接受的答案如果不是,请让我知道如何进一步帮助。您的意思是“如何将
DataRow
转换为
sqlprop
”?不清楚您的意思,并且您的代码示例有很多问题模糊了示例的意图。是的,将DataRow转换为sqlprop。请问,我是否回答了您的问题(最终)如下?如果是这样,您可以将其标记为已接受的答案,如果不是,请让我知道如何进一步帮助。很好,但是否还有其他方法可以使其更具动态性?我有数百个sql查询,因此我不想手动编写…GetString(xxx)等等。有没有办法让它自动填入匹配的列/变量?@user719825听起来你好像不想使用数据集。是的,我同意可能有一种比使用数据集更好的方法,但你还是来了,享受吧!一个问题。我得到了一个答案.Cast()的“不包含Cast a的定义和最佳扩展方法重载”噢,对不起,您可能需要使用Rows属性-更新了代码很棒,但是否还有其他方法使其更具动态性?我有数百个sql查询,因此我不想手动编写…GetString(xxx)等等。有没有办法让它自动填入匹配的列/变量?@user719825听起来你好像不想使用数据集。是的,我同意可能有一种比使用数据集更好的方法,但你还是来了,享受吧!一个问题。我得到了一个“不包含Cast a的定义和最佳扩展方法重载“for.Cast()噢,对不起,您可能需要使用Rows属性-更新了代码