2008-10-29 56 views
2

我們需要生成在編碼(設計時)期間100%未知的LINQ查詢。這是因爲邏輯在我們的框架中可用,與任何數據項目100%分離。對於我們使用LLBLGen生成的數據訪問代碼的數據。用字符串動態創建(LLBLGen)Linq查詢

正常情況下,通過對我們指定給框架(不是引用)的DLL調用,我們可以創建代碼來檢索數據。但是現在我們需要通過linq來做到這一點。我們如何創建一個查詢如下:

var q = from customer in m.Customer 
     select new 
     {     
      customer.Number, 
      customer.City, 
      customer.CountryEntity.Name    
     }; 

僅來自字符串。我們會有一個名爲「customer」的字符串,所以我們知道我們必須從Customer中檢索。然後我們會有一個包含我們想要檢索的字段名的字符串[]。正如你所看到的,這些列可以包含複雜類型(相關字段)。

任何建議,特別是與LLBLGen結合,將是偉大的!

感謝, 加布

+0

LINQ試圖幫助你避免串並直接與一個類型安全的方式處理的對象。如果你不想要,那麼你可能根本不需要LINQ。 – Hallgrim 2008-10-29 22:52:22

回答

1

我不知道這是否是你尋找什麼,但斯科特谷在他的有關使用動態LINQ博客的一篇文章。 http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

它可能不會做你需要的一切,但它可能會讓你的一些方法。

編輯。我只是看看斯科特顧的一些示例代碼,並發現它可以完成您需要的選擇部分。示例(這是Scotts代碼):

Dim query = db.Customers.Where("City == @0 and Orders.Count >= @1", "London", 10). _ 
       OrderBy("CompanyName"). _ 
       Select("New(CompanyName as Name, Phone)") 

正如您所看到的底部位具有動態選擇。

還要解決哪些對象在運行時查詢動態瞭解的問題,可以是這樣的:

Sub query(Of T)(ByVal Myobject As IQueryable(Of T)) 
    Dim i = Myobject.Select("New(customer.Number)") 
End Sub 

然後你從數據庫中讀取的名字後,你可能只是做一個小開關,像所以:

Sub PassIt() 
    Dim name = "customer" 
    Select Case name 
     Case "customer" 
      query(m.Customer) 
    End Select 
End Sub 

希望這有助於。 注意!做最後一部分會有更好的方法(passit方法),但它可能會在凌晨時分想到它。

對不起答案是VB我應該在C#中都做到了

+0

我也發現了這一點......但它是我最需要的'選擇'部分。不是過濾字段。不管怎麼說,還是要謝謝你 – 2008-10-30 09:09:29