NHibernate QueryOver "select where true"

NHibernate QueryOver "select where true"

我需要 select 登录用户的记录或所有用户的记录(如果登录用户是管理员)。

int userId = 1;
bool isManager = true; // or false ;

IQueryOver<Demanda, Demanda> Query1 =
nhibernateSession.QueryOver<Demanda>(() => DemandaAlias)
    .Where(() =>
       (DemandaAlias.userID == userId) ||
       (isManager)
);

这将转化为 SQL 像这样的事情:

Select * from Demanda where Demanda.userId=1 or 1=1

如何设置 "constant" 参数?

最常用的方法是在 C# 中应用 if 语句,同时 构建查询

var query = nhibernateSession
    .QueryOver<Demanda>(() => DemandaAlias);

var someTestIfShouldApplyThisFilter = ...;

if (someTestIfShouldApplyThisFilter)
{
    query = query.Where(() => (DemandaAlias.ID == userId);
}

稍后我们可以使用该引用来获取列表(或apply/not根据其他 if 语句应用其他 where 条件)

query.List<Demanda>();

Radim 的回答很完美,但我想写更少的 Nhibernate/C# 代码。发现这个:

IQueryOver<Demanda, Demanda> Query1 =
nhibernateSession.QueryOver<Demanda>(() => DemandaAlias)
    .Where(() =>
       (DemandaAlias.ID == userId) ||
       (isManager==true) //<====
);

实际上按要求工作,而这个

IQueryOver<Demanda, Demanda> Query1 =
    nhibernateSession.QueryOver<Demanda>(() => DemandaAlias)
        .Where(() =>
           (DemandaAlias.ID == userId) ||
           (isManager) //<====
    );

会给你一个运行时错误。