我有DataSet
,我想将DataSet
转换为List<T>
T型对象
如何转换我的DataSet
?它有10列,我的对象拥有所有10个属性,它返回超过15000行。我想将该数据集返回到List<obj>
并循环它我该怎么做?
答案 0 :(得分:16)
这与其他答案几乎相同,但引入了强类型列。
var myData = ds.Tables[0].AsEnumerable().Select(r => new {
column1 = r.Field<string>("column1"),
column2 = r.Field<int>("column2"),
column3 = r.Field<decimal?>("column3")
});
var list = myData.ToList(); // For if you really need a List and not IEnumerable
答案 1 :(得分:4)
我认为应该这样做。
var output = yourDataSet.Tables[0].Rows.Cast<DataRow>().Select(r => new
{
Column1 = r["Column1"].ToString(),
Column2 = r["Column2"].ToString(),
Column3 = r["Column3"].ToString(),
Column4 = r["Column4"].ToString(),
Column5 = r["Column5"].ToString(),
Column6 = r["Column6"].ToString(),
Column7 = r["Column7"].ToString(),
Column8 = r["Column8"].ToString(),
Column9 = r["Column9"].ToString(),
Column10 = r["Column10"].ToString()
}).ToList();
答案 2 :(得分:4)
首先,你走在正确的轨道上,但你应该考虑IEnumerable<T>
而不是List<T>
。以下是你将如何做到这一点:
var myData = ds.Tables[0].AsEnumerable()
.Select(r => new {column1 = r[0].ToString(),
column2 = r[1].ToString()
/*etc*/
});
从不在您绝对需要之前将IEnumerable转换为List。
答案 3 :(得分:0)
我知道@bharat要求使用LINQ的解决方案,但主要是为了我自己,我想将@ Kelsey的解决方案与老式的方式进行比较:
List<Obj> list = new List<Obj>();
foreach (DataRow r in yourDataSet.Tables[0].Rows)
{
Obj obj = new Obj();
obj.Column1 = r["Column1"];
obj.Column2 = r["Column2"];
obj.Column3 = r["Column3"];
obj.Column4 = r["Column4"];
obj.Column5 = r["Column5"];
obj.Column6 = r["Column6"];
obj.Column7 = r["Column7"];
obj.Column8 = r["Column8"];
obj.Column9 = r["Column9"];
obj.Column10 = r["Column10"];
list.Add(obj);
}
或通过构造函数:
List<Obj> list = new List<Obj>();
foreach (DataRow r in yourDataSet.Tables[0].Rows)
{
Obj obj = new Obj(r["Column1"], r["Column2"], r["Column3"], r["Column4"], r["Column5"],r["Column6"], r["Column7"], r["Column8"], r["Column9"],r["Column10"]);
list.Add(obj);
}
我故意不让.ToString()
因为我认为使用它取决于具体情况。
答案 4 :(得分:0)
感谢上述所有帖子......
我已经使用Linq Query完成了它,详情请访问链接
http://codenicely.blogspot.com/2012/02/converting-your-datatable-into-list.html
答案 5 :(得分:0)
我使用的一种非常简单的方法如下:
List<Obj> objList = new List<Obj>();
foreach (DataRow _dataRow in dataSet.Tables[0].Rows)
{
Obj obj = new Obj();
obj.Col1 = Convert.ToInt32(_dataRow["Col1"]);
obj.Col2 = Convert.ToInt32(_dataRow["Col2"]);
obj.Col3 = Convert.ToString(_dataRow["Col3"]);
objList.Add(obj);
}