我有一个使用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