簡體   English   中英

Linq到NHibernate與ICriteria

[英]Linq to NHibernate vs. ICriteria

我一般使用LINQ,特別是LINQ-to-Objects,因此我對LINQ非常流利。

我正在考慮使用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是相同的。

它看起來好像NHibernate.Linq現在不支持這種優化。 我認為您需要使用條件查詢或HQL,或者等到完全集成的LINQ提供程序發布(我認為是NHib v3)。

干杯,約翰

你使用的是最新版本嗎?

我還沒自己去嘗試一下。 但我不得不說,在嘗試使用Linq-to-NHibernate時,我總是遇到問題。 好吧,也許我對他們兩個都是新手太多......但是Linq應該是直觀的,並且從一個在HQL中完美運行的該死的簡單查詢(就像你的那個)獲取null引用並沒有什么直觀的。

但這是可以理解的,因為那是在發展中。 我想,仍然是;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM