如果登录用户是经理,我需要为登录用户选择记录或为所有用户选择记录。
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
如何将“常量”参数设为白色?
答案 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) //<====
);
会给你一个运行时错误。