1

我在查询FooFoo没有IList<FooBar>财产(不幸的是)。FooBar有一个Foo属性(但不是 a Bar), Bar 有一个IList<FooBar>. 我需要Foo存在 a 的所有 s ,其FooBar对应Bar的字段等于今天。BarDate

我不是 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>();

我写什么代替/*???*/

4

1 回答 1

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>();
于 2012-06-25T15:00:55.123 回答