我一般使用LINQ,特別是LINQ到對象,因此我在LINQ中很流利。Linq to NHibernate vs. ICriteria
我正在考慮使用LINQ-to-NHibernate作爲我的NHibernate項目的查詢語言。當我編寫一些測試時,我注意到LINQ-to-NHibernate與ICriteria沒有相同的查詢。因爲我更喜歡使用LINQ,所以我想問問任何人是否知道類似的差異,或者我應該不關心整體性能(無論如何,高性能操作無論如何都需要對NHibernate進行一些調整它)。請看下面的例子:
var query = (from inputItem in session.Linq<InputItem>()
where inputItem.Project == project select inputItem).First();
給了我下面的SQL:
SELECT this_.ID as ID0_1_, this_.Name as Name0_1_, this_.Project_id as Project3_0_1_, project1_.ID as ID1_0_, project1_.Name as Name1_0_
FROM "InputItem" this_ left outer join "Project" project1_ on this_.Project_id=project1_.ID
WHERE this_.Project_id = @p0 limit 1;@p0 = 1, @p1 = 1
而
var criteria = session.CreateCriteria<InputItem>();
criteria.Add(Expression.Eq("Project", project));
criteria.SetMaxResults(1);
criteria.List();
給
SELECT this_.ID as ID0_0_, this_.Name as Name0_0_, this_.Project_id as Project3_0_0_
FROM "InputItem" this_
WHERE this_.Project_id = @p0 limit 1;@p0 = 1, @p1 = 1
顯然,LEFT JOIN不會必要。
我的LINQ查詢出了什麼問題,還是隻是一個限制?我應該首先擔心它嗎?
ICEY
編輯: 我試圖改變LINQ語句如下:
var query = (from inputItem in session.Linq<InputItem>()
where inputItem.Project.ID == project.ID
select inputItem).First();
生成的SQL是一樣的,雖然。
所以我認爲,我沒有犯任何明顯的錯誤。 – 2009-08-11 08:09:07