我已经开发了一个应用程序,它在任何地方都返回DataTable
。
现在,我的客户端希望进行转换(使用服务堆栈的某个部分),因此我需要在应用程序中返回DTO (objects)
。
我不想更改现有的存储过程,甚至不想尽可能多地使用LINQ(我对LINQ不是很了解)。
对于小功能,我可以使用Linq没有问题。
**我的问题是:**如何将我的DataTable
更改为该类的对象?
示例代码如下所示:
string s = DateTime.Now.ToString();
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("name");
for (int i = 0; i < 5000000; i++)
{
DataRow dr = dt.NewRow();
dr["id"] = i.ToString();
dr["name"] = "name" + i.ToString();
dt.Rows.Add(dr);
dt.AcceptChanges();
}
List<Class1> clslist = new List<Class1>();
for (int i = 0; i < dt.Rows.Count; i++)
{
Class1 cls = new Class1();
cls.id = dt.Rows[i]["id"].ToString();
cls.name = dt.Rows[i]["name"].ToString();
clslist.Add(cls);
}
Response.Write(s);
Response.Write("<br>");
Response.Write(DateTime.Now.ToString());
我知道,上述方法是耗时的,我正在努力寻找一个替代的解决方案。
有没有其他方法(我猜是LINQ to DataTable)可以直接将表的行转换为List<Class1>
?
以便我可以返回服务堆栈中的对象并继续操作。
6条答案
按热度按时间kcwpcxri1#
初始化数据表:
查询本身:
rks48beu2#
Amit,我已经使用了一种方法来实现这一点,更少的编码和更有效的方式。
但它使用Linq。
我把它贴在这里,因为也许答案有助于其他SO。
下面的DAL代码将datatable对象转换为YourViewModel列表,非常容易理解。
现在,传递和调用方法的方法如下。
到目前为止,对于我的许多应用程序,我发现这是获取数据的最佳结构。
cgh8pdjw3#
看着这个,我意识到:它是从一种对象到另一种对象;基本上我们是在做适当的反射。
有适当的方法来构造不同字段之间的关系,但给予类定义是做的,这可以很容易地由Newtonsoft. Json完成
进程:数据集/数据表(序列化)==〉Json(反序列化)==〉目标对象列表在本例中作为OP,只需执行以下操作:
现在DataTable被序列化为纯字符串。然后执行以下操作:
现在,您应该有了List,其中所有DataTable行都是单独的对象。
ego6inou4#
它是VB.NET版本:
结束类别
jhkqcmku5#
用json convert做这个是不是很贵?但是至少你有一个2行的解决方案和它的泛型。不管你的datatable包含的字段比object类多还是少:
j91ykkif6#
到2023年,一个更简单,更少的代码
对于类对象List
对于类对象