2011-08-05 39 views
1

我很好奇Enity Framework如何與LINQ集成,以便生成SQL語句以針對數據庫運行。在自定義對象中實現LINQ to SQL/Entity like行爲

因此可以說我有我自己的自定義集合對象。你如何將這個對象與LINQ集成來生成SQL語句?

+1

這是一個非常廣泛的問題。你可以說得更詳細點嗎? –

+0

@Justin,這只是答案可能是一個非常深刻的問題。我不太瞭解接口的實現,所以我不能真正問一個具體的問題。我或多或少只是在尋找你從這個任務開始的地方。 – Kratz

回答

3

如果你想使自己的收藏創建SQL語句,那麼你會做的是您的收藏類是否實現了接口IQueryable。作爲此接口的一部分,當執行Linq表達式時,.NET框架會將Linq表達式樹傳遞給您自定義的IQueryable實現。然後,您的代碼將解析此表達式樹,並根據需要生成SQL,或執行任何其他需要的操作,然後返回結果。

編輯:添加鏈接

+1

好的答案+1,但您可以通過提供一些關於進一步閱讀的鏈接來改善它。我個人建議從Jon Skeet的書開始,然後繼續閱讀關於實現IQueryable的更多內容,如果你想在你的代碼中實現它。 –

+0

@Dmitry - 根據要求添加鏈接。請享用! – CodingWithSpike

2

您必須在自定義類上實現某些接口(例如IQueryable)以便使用Linq來查詢它們。另外,如果你有一個集合組成你的類,那麼你可以公開它的Enumerator以獲得這個地形(實現IEnumerable)。 見: How to implement IQueryable

如果你需要一個更專業「的LINQ」功能,像在LINQ的使用SQL翻譯LINQ表達式到T-SQL中的一個,那麼Linq的是像一個標準:Diferent組技術不同地實施Linq,但有一定的指導原則。這對LINQ是正確的XML,LINQ到實體,LINQ到SQL等 見:

Walkthrough: Creating an IQueryable LINQ Provider

+0

我不完全知道你的意思,「爲了讓Linq支持。」我只是想確保人們沒有得到錯誤的印象.. LINQ代表語言集成查詢和對象的開箱的工作,而無需裝飾現有對象。 –

+0

@Quintin--我認爲他指的是你需要實現諸如'IEnumerable '或'IQueryable '這樣的接口來訪問大多數LINQ擴展方法。它不一定適用於給定類的單個實例。然而,這只是LINQ巨大圖片的一小部分。這個問題非常廣泛。 –

+0

@Quintin,Justin,你說得對。我編輯了我的答案。謝謝 – SalvadorGomez

1

要具有類似要求幫助那裏的人,我寫了一個系列教程如何創建一個簡單的LINQ提供程序,解析表達式樹,將它們轉換爲所需的輸出(例如, G。 SQL)並編譯。爲一個生產系統開發了一個這樣的提供者後,我最終認爲這個經驗可能會幫助別人,挑戰是找時間寫出來。我已經在過去大大受益於別人分享他們的知識,特別是對受試者它是稀缺的,所以,我希望,這也可以找到觀衆: