NHibernate QueryOver“select where true”

时间:2017-02-21 14:17:24

标签: c# nhibernate fluent-nhibernate queryover

如果登录用户是经理,我需要为登录用户选择记录或为所有用户选择记录。

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

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

这会转化为这样的SQL:

  

从Demanda中选择*,其中Demanda.userId = 1或1 = 1

如何将“常量”参数设为白色?

2 个答案:

答案 0 :(得分:1)

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

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

var someTestIfShouldApplyThisFilter = ...;

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

以后我们可以使用该引用来获取列表(或者应用/不应用其他基于其他if语句的条件)

query.List<Demanda>();

答案 1 :(得分:0)

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) //<====
    );

会给你一个运行时错误。