LINQ или DataTable, когда число полей неизвестно - PullRequest
1 голос
/ 25 февраля 2010

У меня динамический запрос, который возвращает DataTable. Этот DataTable будет содержать различное количество столбцов в зависимости от выбора, используемого в запросе. Я хочу эффективный способ фильтрации записей в DataTable.

Например
DataTable содержит столбцы: A, B, C и D

Мне нужно запросить эти данные в нескольких точках моей программы.
В какой-то момент мне могут понадобиться записи, где A = 10 и C> 40. В другой момент мне могут понадобиться записи, где A <10 и D = 90 и т. Д. И т. Д. Выборы являются динамическими, я не знаю, какие столбцы или значения необходимы, пока не будет выполнен код. </p>

Я мог бы просто использовать DataTable Filter и динамически создавать строку выбора. У меня нет проблем с этим. Однако мне было интересно, будет ли использование LINQ более подходящим. Я совершенно новичок в LINQ и хотел бы использовать его, но не знаю его возможностей.

(В настоящее время я использую DataTable, но в будущем это может измениться на коллекцию объектов)

Ваши идеи, пожалуйста.

1 Ответ

2 голосов
/ 25 февраля 2010

Вы можете использовать методы расширения Linq to DataSet (объявлено в System.Data.DataSetExtensions.dll)

Dim table As New DataTable
...

Dim query1 = From r In table.AsEnumerable()
             where r.Field(Of Int32)("A") = 10
             AndAlso r.Field(Of Int32)("C") > 40

For Each row As DataRow In query1
    ' Do something with the row
Next

...

Dim query2 = From r In table.AsEnumerable()
             where r.Field(Of Int32)("A") < 10
             AndAlso r.Field(Of Int32)("D") = 90

For Each row As DataRow In query2
    ' Do something with the row
Next
...