我似乎找不到任何关于这个问题的确切答案,希望有人能在这里帮助我。
示例查询:
select * from A a inner join B b on a.Id = b.Id Or a.Date = b.Date
我想知道是否可以使用criteria实现连接条件的第二部分,如果可能的话,请告诉我具体方法。非常感谢!
我似乎找不到任何关于这个问题的确切答案,希望有人能在这里帮助我。
示例查询:
select * from A a inner join B b on a.Id = b.Id Or a.Date = b.Date
我想知道是否可以使用criteria实现连接条件的第二部分,如果可能的话,请告诉我具体方法。非常感谢!
这可能是,但那个查询在HQL中写得更清晰:
select a from A a, B b where a.Id = b.Id or a.Date = b.Date
正如您所看到的,它几乎与SQL相同。
要添加条件,请使用表达式。对于OR
析取,如果使用Expression.In,则不太复杂。
session.CreateCriteria(typeof(A), "a").CreateCriteria("B", "b", NHibernate.SqlCommand.JoinType.FullJoin)
.Add(Expression.Eq("a.Date", a.Date))
.Add(Expression.Eq("b.Date", b.Date))
很遗憾,您不能使用NHibernate定义ANSI语法连接。 从NH2开始,您可以在HQL上使用WITH子句来定义它们。如果您使用Diego的解决方案,那么如果您想执行多个连接,则必须在查询中设置ISNULL OR模式。