我有一个带有日期时间字段CreatedOn的表。我想获取日期时间字段(CreatedOn)的分钟在31到59之间的所有记录。我想得到NHibernate相当于
SELECT * FROM dbo.CL_M_Organization
WHERE DATEPART(mi,CreatedOn) BETWEEN 31 AND 59
基本的NHibernate查询是
var result = NHSession.QueryOver<Organization>()
.Where(x=>x.CreatedOn < currentdatetime)
.List<Organization>()
.ToList();
字段CreatedOn的类型为datetime。
任何人都请帮忙......
答案 0 :(得分:4)
如果您使用的是旧版本的NHibernate,则可以使用MinutePart
扩展名方法(位于NHibernate.Criterion
命名空间中)以及IsBetween
扩展名方法:
var result = NHSession.QueryOver<Organization>()
.Where(x => x.CreatedOn.MinutePart().IsBetween(31).And(59))
.List<Organization>()
.ToList();
但是,如果您使用的是较新版本的NHibernate(&gt; = 4),则应直接使用DateTime.Minute
属性。 NHibernate将了解您正在尝试做什么并将其正确地转换为SQL:
var result = NHSession.QueryOver<Organization>()
.Where(x => x.CreatedOn.Minute.IsBetween(31).And(59))
.List<Organization>()
.ToList();
这两个都会生成以下SQL:
SELECT
/* All OrganizationUnit columns */
FROM
Temp this_
WHERE
datepart(minute, this_.CreatedOn) between 31 and 59;