2009-11-26 3 views
4

문제에 대한 확실한 답을 찾을 수없는 것 같습니다. 누군가 나를 도와 줄 수 있기를 바랍니다.Nhibernate 기준이 여러 조건에 합치다 ​​

샘플 쿼리 :

select * from A a inner join B b on a.Id = b.Id Or a.Date = b.Date 

는이 기준을 사용하여 조인 조건의 두 번째 부분을 구현할 수 있다면 기본적으로 내가 알고 싶어하고, 가능한 경우, 어떻게 그것에 대해 이동합니다. 누구든지 내게 알려 주시면 좋을 것입니다! 무리 감사!

답변

1

그것은 될 수도 있지만 해당 쿼리가 더 명확 HQL로 작성된 것입니다 : 당신이 볼 수 있듯이

select a from A a, B b where a.Id = b.Id or a.Date = b.Date 

, 그것은 거의 SQL 동일합니다.

+0

내가 정확히 때문에 우리가 결과를 변경할 넣어 일부 사용자 지정 래퍼의 HQL을 사용할 수는 없지만를 사용하는 경우,하지만 나는 방법에 그래도 좀했다 쿼리 방법을 바꿀 수 있습니다. 제 질문에 답변 해 주셔서 감사합니다. – Akey

0

안타깝게도 NHibernate에서 ANSI 구문 조인을 정의 할 수 없습니다. NH2 이후에는 WITH 절을 사용하여 HQL에서 정의 할 수 있습니다. 디에고의 솔루션을 사용하면 다중 조인을 수행하려는 경우 ISNULL 또는 패턴을 쿼리에 설정해야하기 때문에 그렇게 말합니다.

0

조건을 추가하려면 표현식을 사용하십시오. OR 분리의 경우, 그 덜 복잡 당신은 Expresion.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)) 
관련 문제