如何将DataSet / DataTable转换为某种类型的通用列表?

时间:2010-10-20 21:02:48

标签: c# generics dataset

我看了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;

5 个答案:

答案 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)

另一个例子:

几个月前我写了这篇文章:

http://www.codeproject.com/KB/linq/FromDataTable2GenericList.aspx

希望它有所帮助!