NHibernate queryover how to apply date isbetween without including the from and todate
NHibernate queryover how to apply date isbetween without including the from and todate
我正在尝试将 NHibernate 查询写入 select 两个日期之间已删除的所有记录。我正在使用 IsBetween().And()。但是,如果我不想同时包括 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>();
}
任何人都可以帮助我实现如何实现删除日期之后和删除日期之前的所有记录吗?
谢谢
只需两步构建您的日期:
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);
youNeedFromDate
和 youNeedToDate
是 bool
变量,您可以将它们传递给您的函数,或者根据您的逻辑,它可能是不同的条件。
这种情况经常发生。定义扩展方法有很大帮助。见下文
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;
}
使用上面的方法你可以链接你的条件,只有当第一个 arg 的计算结果为真时它才会包含 where 条件。
var query= Session.QueryOver<DeletedRecord>()
.WhereIf(filterByFrom,d=>d.DeletedDate>=fromDate)
.WhereIf(filterByTo,d=>d.DeletedDate<=toDate);
我正在尝试将 NHibernate 查询写入 select 两个日期之间已删除的所有记录。我正在使用 IsBetween().And()。但是,如果我不想同时包括 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>();
}
任何人都可以帮助我实现如何实现删除日期之后和删除日期之前的所有记录吗?
谢谢
只需两步构建您的日期:
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);
youNeedFromDate
和 youNeedToDate
是 bool
变量,您可以将它们传递给您的函数,或者根据您的逻辑,它可能是不同的条件。
这种情况经常发生。定义扩展方法有很大帮助。见下文
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;
}
使用上面的方法你可以链接你的条件,只有当第一个 arg 的计算结果为真时它才会包含 where 条件。
var query= Session.QueryOver<DeletedRecord>()
.WhereIf(filterByFrom,d=>d.DeletedDate>=fromDate)
.WhereIf(filterByTo,d=>d.DeletedDate<=toDate);