我正在開發一個應用程序,允許工程師通過選擇數據庫,表,字段來對我們的數據庫進行簡單的單表/查詢查詢。我該如何動態選擇我的表在運行時動態LINQ
我得到如何使用動態LINQ庫示例來提供在運行時動態選擇Select,Where和Order by子句,但我無法分配表選項。
有沒有辦法提供在運行時動態選擇「從」表,以及如果你怎麼能提供一些具體的例子或指向我的人的方向?
非常感謝你。
編輯
所以這兩個答案似乎在說同樣的總體思路。我將嘗試將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
,但它扔我的錯誤,指出擴展方法只能在模塊定義。 但是,當我將它包裝在模塊標籤中時,它仍會給出相同的錯誤。
所以我通過將它包裝在模塊標籤中並剝離類標籤來編譯它。另外,我可以將最後一行拉出來,直接插入我的基本方法中,該方法允許我執行它,但似乎是空的。當我試圖列舉結果時,沒有。不知道這是我的代碼問題還是新的代碼問題,我會測試更多。
這是我對第二個例子的轉換,現在我試着去看看我能否讓它們工作。經過一些測試後,我會回到問題或結果。
'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
我想實現這個,但我該如何調用擴展方法?重要的是要注意,爲了讓代碼在VB中工作,我必須把它放在一個模塊中,並去掉類標籤。 – Neberu 2011-02-17 18:50:31
查看上面的更改。不確定擴展方法在VB.Net中的工作方式與C#中的相同。 – mellamokb 2011-02-17 19:27:08