Как преобразовать DataTable в класс Object?

Я уже разработал приложение, которое везде возвращает 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 ?

Чтобы я мог возвращать объекты в моем служебном стеке и вперед.

31
задан Emma 8 August 2019 в 06:07
поделиться

1 ответ

Это - 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
Конца
1
ответ дан 27 November 2019 в 21:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: