NHibernate基于Minute从日期字段中选择查询

时间:2014-12-02 11:08:20

标签: c# nhibernate queryover

我有一个带有日期时间字段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。

任何人都请帮忙......

1 个答案:

答案 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;