1

나는 Foo을 질의하고있다. Foo에는 IList<FooBar> 속성이 없습니다 (불행히도). FooBarFoo 속성을 가지고 있지만 (Bar은 아님), Bar는 IList<FooBar>입니다. 모든 Foo이 필요합니다. 여기에 FooBar이 있고 BarDate 필드가 오늘과 동일한 해당 Bar이 있습니다.NHibernate : Reverse Exists 기준

저는 Criteria API를 사용하는 전문가는 아니지만 그것을 사용할지 여부는 제 선택이 아닙니다.


편집

:은 내가 QueryOver API와 같은 노력이 지금까지 가지고 :

var q1 = session.QueryOver<Foo>() 
       .WithSubquery.WhereExists<Bar>(
        session.QueryOver<Bar>() 
          .Where(b => b.Date == DateTime.Today) 
          .JoinQueryOver<FooBar>(b => b.FooBars) 
          .Where(fb => fb.Foo == /*???*/)) 
       .List<Foo>(); 

내가 /*???*/의 장소에서 무엇을 작성하려면 어떻게해야합니까?

답변

1

초기 면책 조항 - 내가 NHibernate에 지금 설치되어 있지 않기 때문에이 검증되지 않은,하지만 난 이런 식으로 뭔가로 접근하는 것입니다 :

var foos = session.CreateCriteria<Bar>("bar") 
         .CreateCriteria("FooBars", "foobar") 
         .Add(
         Restrictions.Eq(
          "bar.Date", 
          DateTime.Today.ToString("d", CultureInfo.InvariantCulture) 
         )) 
         .SetProjection(Projections.Property("foobar.Foo")) 
         .List<Foo>(); 
+0

기다립니다 ... FOOBAR 나는, 바 연관이없는 명시 적으로 말했어 – TDaver

+0

Woops, 나는 그것을 놓쳤다 ... 호기심에서, 당신이 실제로 조인 테이블을 가지고있는 이유가 있단다. –

+1

그들은 다른 방향으로 합류합니다. Bar-> FooBars-> Foo – TDaver