2012-06-25 52 views
1

我在查詢FooFoo沒有IList<FooBar>屬性(不幸)。 FooBar有一個Foo財產(但不是Bar),酒吧有一個IList<FooBar>。我需要所有的Foo s,其中存在一個FooBar,其具有相應的Bar與該BarDate字段等於今天。NHibernate:現有的存在條件

我並不是真正的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

Woops,我錯過了......出於好奇,是否有一個原因,你有加入表,實際上並不......你知道......加入任何東西? –

+1

他們加入,在另一個方向。 Bar-> FooBars-> Foo – TDaver