我看了answered topic的答案: List list = dt.AsEnumerable()。ToList();
但是,如果想要转换为某些实体类型的列表呢?例如,我有一个实体类Property:
public class Property
{
public int ID { get; set; }
public string Chain { get; set; }
public string Name { get; set; }
public string Street { get; set; }
public string Street2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
public string Country { get; set; }
public string Phone { get; set; }
public string FAX { get; set; }
public string Longitude { get; set; }
public string Latitude { get; set; }
public string Airport { get; set; }
}
我必须使用返回DataSet的Oracle SP。我想要做的是将DataSet(或DataTable)转换为List
DataSet ds =(“call SP”); List = ds.something;
答案 0 :(得分:5)
在这种情况下,您可以考虑使用LINQ。
var list = (from dr in dt.AsEnumerable()
select new Property { .... }).ToList();
创建列表作为结果。
编辑:第一句温和。
答案 1 :(得分:1)
只是旁注。我之前走过这条路,发现大部分时间我都不需要在数据表周围使用某种实体类包装器。相反,数据表本身的正常行/列访问就好了。它只是通过表格来节省处理时间和内存消耗。
通常情况下,如果我从proc中提取数据进行显示,我会将其保留在表格中。但是,如果我有一个包含除了保存数据之外的其他功能的类,那么我可能会将数据表转换为对象的列表/集合。
另一方面,如果数据是从浏览器返回的,那么我将在存储到数据库之前填充一个对象,该对象的类定义包含所有相关的验证。
关键是,除非实体类要给你一些你还没有的东西,否则我不会打扰。
答案 2 :(得分:0)
虽然这是在VB中,但您可以将其转换为C#并使用它:
如何将数据集或dbreader转换为 列表(T)或BindingList(Of T)使用 映射
http://prglog.blogspot.com/2009/10/how-to-convert-listof-t-or.html
它看起来像是使用反射,可以使用任何类型。
答案 3 :(得分:0)
您也可以使用LINQ Select()
方法
DataTable dt = new DataTable
var list = dt.Rows.Select(row => new Propert
{
SomeProperty = row["columnName"],//etc...
}).ToList();
答案 4 :(得分:0)