2013-06-27 128 views
0

我剛開始閱讀關於LINQ的知識,有一件事情讓我煩惱。 LINQ將LINQ查詢轉換爲對數據庫服務器的相應SQL查詢。由於我懷疑LINQ可以將任何代碼轉換爲SQL語句,我必須假設這裏有一些限制。LINQ中的where子句轉換爲數據庫查詢中的where子句

因爲我想讓發送到服務器的查詢儘可能的受到限制,那麼LINQ可以變成什麼樣的SQL,什麼不能LINQ變成SQL?

例如where employee.name == "Test"看起來很瑣碎轉換,但where isEven(employee.number)呢?還是更復雜的東西?

+2

因爲LINQ將表達式樹轉換爲SQL,所以您會發現該方法調用拋出異常。它無法轉換方法的隨機複雜邏輯。這就是說..有一些內置的.NET函數,LINQ將很容易識別和轉換.. –

+0

@SimonWhitehead謝謝,這是有道理的,聽起來像是一個理智的解決方案。 – confusopoly

回答

1

Here是詳細說明LINQ to SQL支持哪些方法的MSDN頁面。

您將無法在表達式樹中使用自己的方法調用,因爲LINQ to SQL不知道如何將方法轉換爲SQL。

一些ORM(例如NHibernate)允許你爲自己的方法定義你自己的生成器來生成SQL(NHibernate中的HQL),我不相信L2S支持這個。