Я разрабатываю приложение, позволяющее инженерам выполнять простые запросы к одной таблице / представлению к нашим базам данных, выбрав База данных, Таблица, Поля.
Я понимаю, как использовать пример динамической библиотеки LINQ для динамического выбора предложений «Выбрать, где и упорядочить по предложениям» во время выполнения, но я не могу понять, как распределять выбор таблиц.
Есть ли способ обеспечить динамический выбор таблицы "из" во время выполнения, и если как вы могли бы привести какой-то конкретный пример или указать мне в направлении кого-то, у кого есть?
Большое спасибо.
EDIT
Итак, оба ответа, похоже, говорят об одной и той же общей идее. Я собираюсь попытаться преобразовать C # в VB и заставить его работать.
Первый ответ преобразуется в
NotInheritable Class DataContextExtensions
Private Sub New()
End Sub
<System.Runtime.CompilerServices.Extension> _
Public Shared Function GetTableByName(context As DataContext, tableName As String) As ITable
If context Is Nothing Then
Throw New ArgumentNullException("context")
End If
If tableName Is Nothing Then
Throw New ArgumentNullException("tableName")
End If
Return DirectCast(context.[GetType]().GetProperty(tableName).GetValue(context, Nothing), ITable)
End Function
End Class
но выдает ошибку, утверждающую, что методы Extension могут быть определены только в модулях.
Но когда я оборачиваю его в теги модуля, он все равно выдает ту же ошибку.
Итак, я получил его для компиляции, обернув его в теги модуля и удалив теги класса. Также я могу извлечь из нее последнюю строку и вставить ее непосредственно в базовый метод, который позволяет моему выполнить ее, но, похоже, она возвращается пустой. Когда я пытаюсь перечислить результаты, их нет. Не уверен, что это проблема с моими кодами или проблема с новыми кодами, я протестирую больше.
Вот мое преобразование второго примера. Теперь я ухожу, чтобы попытаться выяснить, смогу ли я заставить их работать. Я вернусь с вопросами или результатами после некоторого тестирования.
'get the table from a type (which corresponds to a table in your context)
Dim dataContextNamespace = "My.DataContext.Namespace"
Dim type = Type.[GetType](dataContextNamespace + tableName)
Dim table = dc.GetTable(type
'add where clauses from a list of them
For Each whereClause As String In whereClauses
table = table.Where(whereClause)
Next
'generate the select clause from a list of columns
Dim query = table.[Select]([String].Format("new({0})"), [String].Join(",", selectColumns))
Спасибо за помощь. BBL