完全一樣。
您可以通過查看的ToString()
string query1String, query2String;
using (var context = new TRANSITEntities())
{
var result = context.Table1.Where(c => c.UserCode == "123");
query1String = result.Expression.ToString();
}
using (var context = new TRANSITEntities())
{
var result = from c in context.Table1
where c.UserCode == "123"
select c;
var query2String = result.Expression.ToString();
}
Assert.AreEqual(query1String, query2String);
還應當指出的是,result
實際上不是一個結果驗證這一點你自己。這是一個未執行/列舉的IQueryable
。這意味着它就像一個尚未運行的SQL語句(有點)。如果你要這樣做
var t1 = result.ToArray()
var t2 = result.ToArray()
然後查詢將被實際執行兩次。 t1
和t2
是REAL結果(在存儲器陣列中)...而不是result
。換句話說,result
實際上應該被命名爲query
而且,上面的示例永遠不會工作......因爲如果您對using
塊以外的結果調用ToArray
,它將失敗...因爲您無法運行一旦上下文處理後查詢:
using (var context = new TRANSITEntities())
{
var result = context.Table1.Where(c => c.UserCode == "123");
}
// throws exception:
var array = result.ToArray();
是的,我的錯誤。我試圖讓它可讀。失敗。 – Mathieu
已修復。成功! –