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) //<====
);
会给你一个运行时错误。
我需要 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) //<====
);
会给你一个运行时错误。