【发布时间】:2014-02-19 15:09:51
【问题描述】:
所以在 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...
【问题讨论】:
-
请先阅读:nhforge.org/doc/nh/en/…(16.2. 简单表达式)。有所有的答案。如果仍然存在任何问题,请展示您到目前为止所做的工作......我相信您会在这里获得帮助;)
-
感谢您的链接。所以基本上看来我无法根据参数(如快捷方式)进行过滤,只能根据列进行过滤。所以我需要使用单独的语句来执行此操作,如下所示: 'code' var qry = session.QueryOver
(); 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 fileList = qry.List ().ToList(); -
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。换句话说,这个生成的代码 sn-p 正是正确的(如果不是最好的)方法!干得好,先生;)
-
您在评论中发布的内容是执行此操作的最佳方式。您应该将其添加为答案并接受它,以便将来对人们有所帮助。
标签: sql nhibernate queryover