2014-11-07 2 views
3

QueryOver을 사용하여 NHibernate 3.3을 사용하여 OR 절을 사용하여 간단한 select를 만들려고합니다. 그래서 간단한 위해 같은 선택 :이 함께 왔어요QueryOver를 사용하는 NHibernate OR

Select x,y,z from myTable where x='one' or y = 'two' or z = 'three' 

:

IList<MyTable> list = session.QueryOver<MyTable>() 
.WhereRestrictionOn(
    Restrictions.Or(Restrictions.On<MyTable>(tab => tab.x == "One"), 
        Restrictions.On<MyTable>(tab => tab.y == "Two")) 
); 

그것은 컴파일 및 TBH하지 않습니다 내가 어떤 식 으로든 잘못된 방향으로 갈거야 생각한다.

+0

당신은 우리에게 컴파일 오류를 줄 수 있습니까? – Liath

답변

3

이 구문은 그것을 우리가 원하는 경우

var list = session.QueryOver<MyTable>() 
    .Where(
     Restrictions.Or(
      Restrictions.Eq(Projections.Property<MyTable>(tab => tab.x), "One"), 
      Restrictions.Eq(Projections.Property<MyTable>(tab => tab.y), "Two") 
     ) 
    ) 
    .List<MyTable>() 

를 해결해야 더 Disjunction는 우리의 방식은 배수 인 OR :

var list = session.QueryOver<MyTable>() 
    .Where(Restrictions.Disjunction() 
     .Add(Restrictions.Eq(Projections.Property<MyTable>(tab => tab.x), "One")) 
     .Add(Restrictions.Eq(Projections.Property<MyTable>(tab => tab.x), "Two")) 
     .Add(Restrictions.Eq(Projections.Property<MyTable>(tab => tab.x), "xxx")) 
    ) 
    .List<MyTable>() 
+0

감사합니다. 두 열에 대해서는 확실히 작동합니다 - 어떻게 세 번째 열을 추가합니까? (z = 'Three')? – Vman

+0

대답을 업데이트했습니다. 도움이 될까요? –

+0

훌륭하고 훌륭한 서비스를 제공합니다! 감사합니다. – Vman

관련 문제