C# 4.0 NHibernate查询如何应用日期介于之间,不包括起始日期和截止日期

C# 4.0 NHibernate查询如何应用日期介于之间,不包括起始日期和截止日期,c#-4.0,linq-to-sql,fluent-nhibernate,C# 4.0,Linq To Sql,Fluent Nhibernate,我正在尝试编写NHibernate queryover来选择在两个日期之间删除的所有记录。我正在使用IsBetween()和()。但是如果我不想同时包含fromdate和todate,我该怎么写呢 我的问题是: public IEnumerable<DeletedRecord> Search( DateTime deletedFrom, DateTime deletedTo ) { DeletedRecord delAlias = null;

我正在尝试编写NHibernate queryover来选择在两个日期之间删除的所有记录。我正在使用IsBetween()和()。但是如果我不想同时包含fromdate和todate,我该怎么写呢

我的问题是:

public IEnumerable<DeletedRecord> Search(
    DateTime deletedFrom,
    DateTime deletedTo
    )
{
    DeletedRecord delAlias = null;
    var query = Session.QueryOver(() => delAlias);
    query.Where(() => delAlias.DeletedDate.IsBetween(deletedFrom).And(deletedTo));

    return query.Future<DeletedRecord>();
}
公共IEnumerable搜索(
从中删除日期时间,
日期时间删除到
)
{
DeletedRecord delAlias=null;
var query=Session.QueryOver(()=>delAlias);
其中(()=>delAlias.DeletedDate.IsBetween(deletedFrom.)和(deletedTo));
返回query.Future();
}
有人能帮我实现吗?这样我就可以在deletedFrom日期之后和deletedTo日期之前携带所有记录


谢谢

只需分两步构建您的日期:

var query = Session.QueryOver(() => delAlias);

if(youNeedFromDate) //first step
   query = query.Where(() => delAlias.DeletedDate >= deletedFrom);
if(youNeedToDate) //second step
   query = query.Where(() => delAlias.DeletedDate <= deletedTo);
var query=Session.QueryOver(()=>delAlias);
if(youNeedFromDate)//第一步
query=query.Where(()=>delAlias.DeletedDate>=deletedFrom);
if(youNeedToDate)//第二步

query=query.Where(()=>delAlias.DeletedDate只需分两步构造日期:

var query = Session.QueryOver(() => delAlias);

if(youNeedFromDate) //first step
   query = query.Where(() => delAlias.DeletedDate >= deletedFrom);
if(youNeedToDate) //second step
   query = query.Where(() => delAlias.DeletedDate <= deletedTo);
var query=Session.QueryOver(()=>delAlias);
if(youNeedFromDate)//第一步
query=query.Where(()=>delAlias.DeletedDate>=deletedFrom);
if(youNeedToDate)//第二步

query=query.Where(()=>delAlias.DeletedDate这种情况经常发生。定义扩展方法很有帮助。请参见下文

    public static IQueryOver<T, T> WhereIf<T>(this IQueryOver<T, T> query,bool condition, Expression<Func<T, bool>> expression) where T : class
    {            
        if (condition)
        {
            query = query.And(expression);
        }

        return query;
    }
publicstaticiQueryOverwhereif(此IQueryOver查询、bool条件、表达式)其中T:class
{            
如果(条件)
{
query=query.And(表达式);
}
返回查询;
}
使用上面的方法,您可以链接条件,只有当第一个参数的计算结果为true时,它才会包括where条件

 var query= Session.QueryOver<DeletedRecord>()
      .WhereIf(filterByFrom,d=>d.DeletedDate>=fromDate)
      .WhereIf(filterByTo,d=>d.DeletedDate<=toDate);
var query=Session.QueryOver()
.WhereIf(filterByFrom,d=>d.DeletedDate>=fromDate)

.wheref(filterByTo,d=>d.DeletedDate这样的情况经常发生。定义扩展方法很有帮助。请参见下文

    public static IQueryOver<T, T> WhereIf<T>(this IQueryOver<T, T> query,bool condition, Expression<Func<T, bool>> expression) where T : class
    {            
        if (condition)
        {
            query = query.And(expression);
        }

        return query;
    }
publicstaticiQueryOverwhereif(此IQueryOver查询、bool条件、表达式)其中T:class
{            
如果(条件)
{
query=query.And(表达式);
}
返回查询;
}
使用上面的方法,您可以链接条件,只有当第一个参数的计算结果为true时,它才会包括where条件

 var query= Session.QueryOver<DeletedRecord>()
      .WhereIf(filterByFrom,d=>d.DeletedDate>=fromDate)
      .WhereIf(filterByTo,d=>d.DeletedDate<=toDate);
var query=Session.QueryOver()
.WhereIf(filterByFrom,d=>d.DeletedDate>=fromDate)

.wheref(filterByTo,d=>d.deleteda)感谢您提供详细信息。