2010-05-17 41 views
0

使用nHibernate,我想查詢整數數據類型,但它總是返回完全匹配。Nhibernate:使用表達式

我怎麼能寫一個表達式,返回一個以輸入的數字開始的列表?

現在我用它作爲: (clientNum是一個長期的)

crit.Add(Expression.Like("ClientNumber", clientNum)); //this always gives me exact matches only 

所以我嘗試以下,但其wroing型complainging(其只期待一個字符串)

crit.Add(Expression.Like("ClientNumber", clientNum, MatchMode.Start)); 

更新:我也試過clientNum.ToString(),但我得到一個數據庫異常說無效類型。

我可以使用如下的sql來得到我想要的,但我如何在nHibernate中做到這一點?

SELECT * FROM ClientTable 
WHERE clientNum LIKE '3%' --incase I wanted a list that starts with 3... 
+0

我想ClientNumber是以字符串形式存儲在數據庫中的,對嗎? – 2010-05-17 18:07:11

+0

不,它被存儲爲一個數值。 – VoodooChild 2010-05-17 18:20:51

回答

1

我不知道的.NET版本,但在HQL hybernate支持有限鑄件(如投(...爲...))。我認爲你需要將該值賦給一個字符串,然後應用你的'Like'子句。應該可以在HQL中完成這一切。或者,您可以使用SQL Expressions(例如,Expression.Sql(...))執行此操作,並使用T-SQL執行相同的操作。

+0

像''從客戶端的位置(客戶端數字爲字符串)像'3%'' – 2010-05-17 20:21:44

+0

@Jamie,我不知道如何使用您的示例,它是與表達式或限制或SQL? 除了我想查詢的數字不是硬編碼的,它作爲參數傳遞給方法。那麼我該怎麼做? – VoodooChild 2010-05-17 21:09:38

+0

這是一個表達式。例如'Expression.Sql(new SqlString(string.format(「cast(clientNum as string)like'{0}%'」,param)))''。檢查過載並使用適合您需求的過載。 – JoeGeeky 2010-05-17 21:34:18