簡體   English   中英

NHibernate - 使用Criteria API對整數列進行LIKE搜索的最簡單方法?

[英]NHibernate - easiest way to do a LIKE search against an integer column with Criteria API?

我正在嘗試對整數列進行搜索,我需要做的是實際將列轉換為varchar然后執行類似搜索。 這可能嗎? 使用Criteria API最簡單的方法是什么?

var search = "123";
criteria.Add(Restrictions.Like("Number", "%" + search + "%"))

如果Number是一個字符串,那么很容易:

.Add(Restrictions.Like("Number", "some_value",MatchMode.Anywhere))

由於你有一個數字,NHibernate將檢查Number的類型,如果你給它一個字符串,它將拋出一個異常。

不確定為什么NH團隊沒有提供帶對象的重載作為參數和MatchMode參數....

無論如何,你仍然可以這樣做:

.Add(Expression.Sql("{alias}.Number like ?", "%2%", NHibernateUtil.String))

編輯

關於別名:

(我找不到文檔談論這個的地方,但這是我對它的理解)

{alias}返回NH內部用於最新CreateCriteria的別名。 所以如果你有:

session.CreateCriteria<User>("firstAlias")
       .CreateCriteria("firstAlias.Document", "doc")
       .Add(Expression.Sql("{alias}.Number like ?", "%2%",  
                           NHibernateUtil.String)).List<User>();

在這種情況下,{alias}將是'doc' - 所以你最終會得到:doc.Number。

因此,請始終在需要使用其別名的CreateCriteria之后使用{alias}。

暫無
暫無

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

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