【发布时间】:2012-01-30 15:18:43
【问题描述】:
HQL 查询是:
from BusinessObject as businessobject
left outer join businessobject.BussinesPartner as businesspartner
left outer join businessobject.Document as document
left outer join businessobject.Group as group ";
where businessobject.Date >= :datefrom and businessobject.Date <= :dateto
and (:filter = ''
or :filter is null
or businesspartner.Name like '%' || :filter || '%'
or group.Name like '%' || :filter || '%'
or document.Name like '%' || :filter || '%')
我不想使用 HQL。我还想要一个强类型的结果集合,而不使用不方便和混乱的 SetResultTransformer。我更喜欢使用 Query(),但我不知道如何强制外连接。
当我以 Query() 形式编写时,它不会返回日期在正确范围内的结果,并且如果例如 BusinessPartner 为空,则 filter = ""。虽然这些对象的“where”逻辑表达式为真,但由于使用了内部连接,它们看起来无论如何都不在结果集中:
session.Query<BusinessObject>()
.Where(x =>
(x.Date >= criteria.DateFrom && x.Date <= criteria.DateTo
&& (criteria.Filter == ""
|| x.BusinessPartner.Name.Contains(criteria.Filter)
|| x.Group.Name.Contains(criteria.Filter)
|| x.Document.Name.Contains(criteria.Filter))))
这不起作用,因为在引用 BusinessPartner、Group 或 Document 的字段中包含 null 的任何行都不会返回(表示内部连接)。
是否可以用 Query() 做我想做的事?还是有标准?
【问题讨论】:
标签: c# linq nhibernate