NHibernate QueryOver主观在哪里?

时间:2014-02-19 15:09:51

标签: sql nhibernate queryover

所以在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 ...

1 个答案:

答案 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查询。