所以在SQL中我可以编写这样的查询:
SELECT
A,
B,
C
FROM
myTABLE
WHERE
(@X is NULL OR A = @X) AND
(@Y is NULL OR B = @Y) AND
(@Z is NULL OR C = @Z)
按顺序创建单个查询,如果未指定过滤参数,则返回所有条目;如果指定了任何过滤参数,则返回子集。但是,如何使用Nhibernate的QueryOver进行此操作?我甚至不完全确定如何使用QueryOvery进行OR ...
答案 0 :(得分:1)
为了主观查询(基于参数),接受的方法是将where子句分段构建:
var qry = session.QueryOver<obj>();
if (!String.IsNullOrEmpty(A)) { qry.Where(x => x.a == A); }
if (!String.IsNullOrEmpty(B)) { qry.Where(x => x.b == B); }
if (!String.IsNullOrEmpty(C)) { qry.Where(x => x.c == C); }
List<obj> data = qry.List<obj>().ToList();
因此,最终结果是针对给定参数集运行的确切查询,而不是原始帖子中指定的通用SQL查询。