使用NHibernate查询器,如何在日期之间添加类型安全限制

使用NHibernate查询器,如何在日期之间添加类型安全限制,nhibernate,queryover,Nhibernate,Queryover,考虑以下QueryOver(季度和中心是传入的变量): 以下是实体(为简洁起见剪掉): 那么,使用新的QueryOver扩展来删除这些神奇字符串的类型安全方式是什么呢?这就是您想要的: Restrictions.And( Restrictions.Lt(Projections.Property<Activity>(x => x.StartDate), quarter.StartDate), Restrictions.Gt(

考虑以下
QueryOver
(季度和中心是传入的变量):

以下是实体(为简洁起见剪掉):

那么,使用新的QueryOver扩展来删除这些神奇字符串的类型安全方式是什么呢?

这就是您想要的:

Restrictions.And(
    Restrictions.Lt(Projections.Property<Activity>(x => x.StartDate),
                    quarter.StartDate),
    Restrictions.Gt(Projections.Property<Activity>(x => x.EndDate),
                    quarter.EndDate)))
Restrictions.And(
限制.Lt(Projections.Property(x=>x.StartDate),
四分之一(起始日期),
限制.Gt(Projections.Property(x=>x.EndDate),
季度(截止日期)

旁注:属性名称不是神奇的字符串。

如果看起来像是吹毛求疵,那就很抱歉了:但它不应该大于开始日期而小于结束日期吗?这也会切断日期完全等于开始日期或结束日期的记录。在大多数情况下,您希望改用此选项:
Restrictions.Le
Restrictions.Ge
Restrictions.And(Restrictions.Lt("StartDate", quarter.StartDate), Restrictions.Gt("EndDate", quarter.EndDate))
public class Quarter
{
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }

}

public class Activity
{
    public string Title { get; set; }
    public Centre Centre { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }

}

public class Centre
{
    public string Name { get; set; }
}
Restrictions.And(
    Restrictions.Lt(Projections.Property<Activity>(x => x.StartDate),
                    quarter.StartDate),
    Restrictions.Gt(Projections.Property<Activity>(x => x.EndDate),
                    quarter.EndDate)))