2009-09-01 88 views

回答

9

LINQ to Entities不允許您訪問數據庫的每個功能。能夠「進入」數據庫有時對於高級查詢是必需的,無論是首先將它們取消,還是改進LINQ to Entities系統對您的查詢做出的有時可怕的選擇。

這就是說,我相信LINQ to Entities應該是第一個達成的工具。如果性能成爲問題,或者你有更復雜的東西,那麼我會把這個問題封裝在存儲過程中並調用它。現在沒有理由將字符串用作查詢的基礎。

2

ESQL允許您在where子句中選擇排序規則,這在LINQ-to-Anything中不受支持。這可能是真正有用的。 ESQL還允許您指定在類型相互繼承時返回的精確類型(與LINQ的OfType相反,它返回某種類型和任何子類型的實例)。除此之外,我想不出有什麼好的理由來使用它。偶爾能夠在字符串中構建查詢,但DynamicQuery/Dynamic LINQ在非常罕見的情況下通常足夠好,因爲這是必要的。我認爲(可能玩世不恭)ESQL的「真正」目的是「它早於LINQ」。

關於Godeke修復非最佳查詢的要點,我還沒有看到一個我無法通過更改LINQ表達式來修復的問題。 ESQL和L2E都以CCT結尾,所以SQL生成管道是相同的。

+0

我關於次最佳查詢的觀點是我可以在TSQL中做我不能在LINQ to Entities中執行的操作。對於一些示例,請參閱Google上的「參數嗅探實體」(或者,如果您有修復,請告訴我並幫助所有其他需要的人!)我發現可靠的一般解決方法是使用T-SQL以避免嗅探錯誤。 – Godeke 2009-09-05 19:33:00

+0

T-SQL,是的。 ESQL,不,大部分。問題是LINQ與* E * SQL,而不是* T * -SQL。 – 2009-09-06 01:11:28

+0

解釋首字母縮略詞請參閱 – alchemical 2010-02-03 19:24:57