Я уже разработал приложение, которое везде возвращает DataTable
.
Теперь мой клиент хочет преобразовать (использовать какую-то часть, используя стек служб), поэтому мне нужно вернуть DTO (объекты)
в моем приложении.
Я не хочу изменять свои существующие хранимые процедуры или даже не хочу максимально использовать 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
?
Чтобы я мог возвращать объекты в моем служебном стеке и вперед.
Это - Vb. Сетевая версия:
Public Class Test
Public Property id As Integer
Public Property name As String
Public Property address As String
Public Property createdDate As Date
Класс
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim x As Date = Now
Debug.WriteLine("Begin: " & DateDiff(DateInterval.Second, x, Now) & "-" & Now)
Dim dt As New DataTable
dt.Columns.Add("id")
dt.Columns.Add("name")
dt.Columns.Add("address")
dt.Columns.Add("createdDate")
For i As Integer = 0 To 100000
dt.Rows.Add(i, "name - " & i, "address - " & i, DateAdd(DateInterval.Second, i, Now))
Next
Debug.WriteLine("Datatable created: " & DateDiff(DateInterval.Second, x, Now) & "-" & Now)
Dim items As IList(Of Test) = dt.AsEnumerable().[Select](Function(row) New _
Test With {
.id = row.Field(Of String)("id"),
.name = row.Field(Of String)("name"),
.address = row.Field(Of String)("address"),
.createdDate = row.Field(Of String)("createdDate")
}).ToList()
Debug.WriteLine("List created: " & DateDiff(DateInterval.Second, x, Now) & "-" & Now)
Debug.WriteLine("Complated")
End Sub
Конца