我有一個愚蠢的問題。我想知道是否有這兩個查詢之間的性能差異:LINQ實體查詢性能
var cObject = from cust in entities.Customer
where cust.id == cid
select cust;
和
var cObject = entities.Customer.First(c=> c.id == cid);
我查詢的回報,因爲我與主鍵查詢只有一個記錄。但他們有什麼區別?
我有一個愚蠢的問題。我想知道是否有這兩個查詢之間的性能差異:LINQ實體查詢性能
var cObject = from cust in entities.Customer
where cust.id == cid
select cust;
和
var cObject = entities.Customer.First(c=> c.id == cid);
我查詢的回報,因爲我與主鍵查詢只有一個記錄。但他們有什麼區別?
表現明智,它們應該是相似的。
類型明智,他們雖然不同。第一個返回一個
IEnumerable
帶有單個元素的IQueryable對象。第二個實際返回一個Customer對象。
嚴格來說,第一行返回'IQueryable'。但是,如果人們認爲最終有人會真正關注查詢,這通常是正確的。 – 2010-05-13 15:30:52
沒有表現。
首先微軟推出
var cObject = entities.Customer.First(c=> c.id == cid);
編輯:返回IQueryable
然後,他們加了糖給它,使工作變得容易是
var cObject = from cust in entities.Customer
where cust.id == cid
select cust;
編輯返回customer object
這就是我的想法,但看到賈斯汀的答案張貼在這裏 – 2010-05-13 14:54:36
我知道,當我計劃編輯權力已經沒有..所以.. 任何方式謝謝 – anishMarokey 2010-05-13 16:00:15
如果您LINQ提供商sup移植「單個記錄查詢」的概念,那麼使用First
的查詢可能會稍微快一點。
請注意,您可以使用第一個,然後執行cObject.First()
以獲得相同的效果。
克雷格斯頓茨關於該問題的評論所指出的,你必須要小心剖析LINQ的代碼,因爲延遲加載延遲執行會扭曲你的分析結果。
要獲得清晰的閱讀,您必須致電ToList()
強制查詢完全執行,然後您必須對第二個示例執行相同的操作,以使其成爲蘋果。
無論如何,第二個查詢被重寫爲返回 IEnumerable IQueryable與一個客戶對象而不是單個客戶對象,這兩個語句在功能上是相同的。
您的第一行代碼不會執行任何SQL。第二個呢。所以是的,會有區別的。 – 2010-05-13 14:30:51
@Craig:DataContext是否必須執行*某種* SQL來檢索記錄? – 2010-05-13 14:41:25
它確實會列舉結果。但第一行不這樣做。 – 2010-05-13 14:49:01