我正在尝试执行以下 LINQ 查询。
var tasks = session.Query<Task>()
.Where(t => t.StartDate.DayOfYear == DateTime.UtcNow.DayOfYear)
.ToList();
这不起作用,因为不支持 DayOfYear。但是,如果我说:
var tasks = session.Query<Task>()
.Where(t => t.StartDate.Day == DateTime.UtcNow.Day)
.ToList();
它工作正常。所以我决定查看 NHibernate 的源代码,看看他们是如何让它工作的。我在 MsSql2000Dialect.cs(MsSql2008Dialect 类继承)中找到了以下行:
RegisterFunction("day",
new SQLFunctionTemplate(NHibernateUtil.Int32, "datepart(day, ?1)"));
因此,我在构造函数中使用以下行创建了自己的自定义方言(继承自 MsSql2008Dialect):
RegisterFunction("dayofyear",
new SQLFunctionTemplate(NHibernateUtil.Int32, "datepart(dy, ?1)"));
然后在我的配置中注册了自定义方言,但我仍然收到以下错误:
NHibernate.QueryException:无法解析属性:DayOfYear
如果有人能告诉我我做错了什么,我将不胜感激。谢谢