2016-01-22 19 views
0

當將字段與null進行比較時,NHibernate很聰明。請看下面的LINQ聲明:與NHibernate中的null進行比較時,強制相等運算符

string s = null; 
var rows = session.Query<Entity> 
    .Where(e => e.SomeField == s) 
    .ToList(); 

的語句被轉化爲SQL查詢

SELECT ... 
FROM entity_table 
WHERE some_field IS NULL; 

在某些情況下,我不希望這種行爲。我希望得到的查詢包含some_field = NULL限制(從不)。

(如何)我可以指示NHibernate做到這一點?或者我必須編寫兩個查詢並在代碼中明確處理空值?

請注意,這是在NHibernate的情況下,而不是LINQ到SQL。 NHibernate不能將object.Equals(e.SomeField, s)轉換爲SQL查詢。另外,與當前的null和直接比較null關鍵字的變量相比,將會產生與NHibernate相同的查詢。

+0

的可能的複製[LINQ的where列==(空引用)不一樣的列== NULL(HTTP://計算器。 COM /問題/ 2097539/LINQ-其中列空引用而不是最同作爲列空) – Michael

回答

1

您可以使用QueryOver,但會生成參數化查詢:

string s = null; 

var rows = session.QueryOver<Entity>() 
    .Where(Expression.Eq(Projections.Property<Entity>(x => x.SomeField), s)) 
    .List();