我有一個使用Criteria的nHibernate查詢,並且我試圖在查詢本身中將字符串轉換爲bool。我已經做了與鑄造一個字符串爲int相同,而且效果很好(以下簡稱「數據字段」屬性爲「1」作爲一個字符串):使用nHibernate標準將字符串轉換爲bool標準
var result = Session
.CreateCriteria<Car>()
.Add(Restrictions.Eq((Projections.Cast(NHibernateUtil.Int32,
Projections.Property("DataField"), 1))
.List<Car>();
tx.Commit();
但我試圖做同樣的布爾,但我沒有得到期望的結果:
var result = Session
.CreateCriteria<Car>()
.Add(Restrictions.Eq((Projections.Cast(NHibernateUtil.bool,
Projections.Property("DataField"), true))
.List<Car>();
tx.Commit();
「數據字段」是字符串「真」,但結果在一個空的列表,其中應包含與設置爲「數據字段」屬性字符串100個元素「真」。我嘗試過使用字符串「true」和「1」,但結果仍然是一個空列表。
[編輯]
如下評論,我可以檢查字符串「真」或「假」,但我會說這是不僅僅是一個布爾一個更具普遍性的問題。
請注意,這個想法是有某種鍵值表示的數據,其中的值可以是不同的數據類型。我需要值表來包含所有數據,因此將數據存儲爲字符串似乎是最乾淨的解決方案!
我已經能夠使用上面的方法來存儲int和double作爲字符串,並在查詢中強制轉換,但我沒有成功使用DateDime和Boolean的相同方法。
而對於DateTime,實際的DateTime對象是至關重要的。
如何將字符串轉換爲布爾值,並將字符串轉換爲DateTime在查詢中工作?
感謝
我不明白爲什麼不只是'Restrictions.Eq(「DataField」,「True」)' – 2010-05-20 20:27:14
你是對的。對於布爾值,我可以輕鬆地進行字符串比較,但是對於DateTime,我有和bool相同的問題,並且將字符串強制轉換爲DateTime對象是至關重要的 – 2010-05-21 08:04:23
爲什麼您將datetime字段映射爲字符串? – 2010-05-21 13:44:22