子句在LINQ到實體您可以通過查詢實體:表現爲使用2,其中在LINQ
var students = SchoolContext.Students.Where(s => s.Name == "Foo" && s.Id == 1);
我知道在幕後將被轉換爲SQL語句類似於:
SELECT *
FROM Students
WHERE Name = 'Foo' AND Id = 1
但是是有區別(相對於性能),如果我寫:
var students = SchoolContext.Students
.Where(s => s.Name == "Foo")
.Where(s => s.Id == 1);
將它翻譯到相同的SQL查詢?根據我的理解,.Where()
將返回IEnumerable<T>
,因此第二個.Where()
將過濾內存中的實體,而不是將IQueryable<T>
轉換爲SQL,這是否正確?
即使不使用分析器也可以調試此方法的一個好方法是斷開代碼並將鼠標懸停在Visual Studio中的變量上,這種方式通常會用來查看某個值的方式。它會在展開時顯示生成的SQL。 – NibblyPig
@SLC:請注意,您所說的只有在使用現代實體框架的'DbContext' API和相關的'DbQuery'時纔有效。如果他使用ObjectContext和相關的ObjectQuery,則需要調用ToTraceString來代替。 (原因:DbQuery的'ToString'實現調用'ObjectQuery.ToTraceString')。 –
很高興知道,謝謝! – NibblyPig