2009-10-14 31 views
0

我試圖運行類似查詢到EntitySet的查詢

var results = MyItem.MyEntitySet.Where(x => x.PropertyB == 0) 

MyEntitySet有一個協會,PropertyA,與MyItem。

理想的情況下,潛在的SQL查詢應該是

SELECT .. FROM .. WHERE ([t0].[PropertyA] = @p0) AND ([t0].[PropertyB ] = @p1) 

因爲PropertyA和PropertyB是我查詢的表的兩個主鍵。

但是我的蹤跡似乎表明程序查詢PropertyA首先返回MyEntitySet,然後查詢PropertyB返回var results

是否有無論如何我可以強制Linq查詢與這兩個條件在一個單一的SQL語句?

回答

0

也許,也許不是。生成的SQL確實與您編寫LINQ查詢的方式相匹配,因此生成的SQL並不意外。如果你以「MyEntitySet」表示的實體開始,那麼也許生成的SQL會改變。

目前還不清楚您是使用LINQ to SQL還是實體框架。 LINQ to SQL確實將一對多關係表示爲「實體集合」,而Entity Framework將關係視爲第一類對象,因此一對多關係是一組關係對象與相關實體的關係,而不是隻是一個實體集。它會影響生成的SQL。其他

兩個想法...

如果你想,超過生成的SQL太多的控制,你可能不會很樂意與LINQ。它並不總是生成最優的SQL(儘管它有時會讓你感到驚訝)。另一方面,LINQ的主要優點之一是您可以開始編寫表達數據中真實關係的代碼。傳統的ADO.NET的缺點是你編寫了關於操作SQL和處理DataSet和DataTable集合的代碼。 LINQ是無限更清晰,更安全,更強大,更可維護的代碼編寫。一切都是取捨。

其次,查詢生成可能會隨着時間的推移而變得更好(特別是在實體框架中)。