我正在尝试使用字符串在数据库中存储不同类型的数据类型。当我做查询时,我需要在查询本身中将字符串转换为正确的类型。我在NHibernate中使用.Net,很高兴知道存在这样的功能。使用Projections.Cast进行NHibernate查询DateTime
对于我使用这个简单的类的实例:
public class Foo
{
public string Text { get; set; }
}
我成功地使用Projections.Cast投为数值,例如以下查询正确返回所有Foos,并存储为int的整数 - 在1-10之间。
var result = Session.CreateCriteria<Foo>()
.Add(Restrictions.Between(Projections.Cast(NHibernateUtil.Int32, Projections.Property("Text")), 1, 10))
.List<Foo>();
现在,如果我尝试使用这个DateTime我无法让它工作,无论我尝试。为什么?!
var date = new DateTime(2010, 5, 21, 11, 30, 00);
AddFooToDb(new Foo { Text = date.ToString() }); // Will add it to the database...
var result = Session
.CreateCriteria<Foo>()
.Add(Restrictions.Eq(Projections.Cast(NHibernateUtil.DateTime, Projections.Property("Text")), date))
.List<Foo>();
这是日期的格式吗?尝试将date.ToString()格式化为“dd MMMM yyyy”并查看。不知道,我没有尝试过,只是一个想法 – 2010-05-21 12:01:15
如果你需要在查询之前施放,这将成为屁股的一大痛苦。如果你真的需要它,我会考虑添加一个列来存储实际类型。这样你就可以确保你的演员会工作。 – dotjoe 2010-05-21 15:37:19
您是否介意解释如何确定演员阵容的作品?因为我会知道类型。 – stiank81 2010-05-21 18:43:30