C# 4.0 NHibernate查询如何应用日期介于之间,不包括起始日期和截止日期
我正在尝试编写NHibernate queryover来选择在两个日期之间删除的所有记录。我正在使用IsBetween()和()。但是如果我不想同时包含fromdate和todate,我该怎么写呢 我的问题是: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;
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)感谢您提供详细信息。