我已经开发了一个应用程序,可以在任何地方返回DataTable个.

现在我的客户机想要转换(使用服务堆栈的某些部分),所以我需要在应用程序中返回DTO (objects).

我不想更改现有的存储过程,甚至不想尽可能多地使用LINQ(我不太了解LINQ).

对于小功能,我可以使用Linq无问题.

My question is:如何将我的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到DataTable)可以直接将表的行转换为List<Class1>行?

这样我就可以返回服务堆栈中的对象并继续操作.

推荐答案

初始化数据表:

DataTable dt = new DataTable(); 
dt.Columns.Add("id", typeof(String)); 
dt.Columns.Add("name", typeof(String)); 
for (int i = 0; i < 5; i++)
{
    string index = i.ToString();
    dt.Rows.Add(new object[] { index, "name" + index });
}

查询本身:

IList<Class1> items = dt.AsEnumerable().Select(row => 
    new Class1
        {
            id = row.Field<string>("id"),
            name = row.Field<string>("name")
        }).ToList();

Asp.net相关问答推荐

实体框架核心:DBCommand执行得更快,但总时间要慢10倍

JWT 和 Google 在 Razor 页面中进行身份验证和授权

禁用托管优化并重新启动调试实际上在 Visual Studio 中更改了哪些设置?

.Net Framework:w3wp.exe 中的异常

如何将 viewbag 显示为 html?

如何在 ASP.NET WebForms 中实现 TDD

我应该使用字节还是整数?

如何缓存数据库表以防止在 Asp.net C# mvc 中出现许多数据库查询

在 Asp.net mvc5 中使用用户名而不是邮箱作为身份

Asp.net Identity 密码哈希

如何在asp.net mvc的html.actionlink中调用javascript函数?

<%# Eval("State") %> 或 <%# DataBinder.Eval(Container.DataItem, "state")%>

如何从 NuGet 安装 EntityFramework 5.0(和其他旧版本)?

如何从 Web API 应用程序返回 PDF

ASP.NET MVC 4 的 Windows 身份验证 - 它是如何工作的,如何测试它

在 ASP.NET 中使用 MasterPages 时使用 JQuery 的正确方法?

如何在 ASP.Net MVC 3 中返回 HttpNotFound() 的视图?

错误处理(向客户端发送 ex.Message)

在 Asp.Net MVC 5 中获取登录用户的用户 ID

如何在asp.net的GridView中按列名而不是按索引获取单元格值