1

我正在为 SQL Server 2012使用 NHibernate3.3.1.4000和 FluentNHibernate1.3.0.733

我有下一节课:

class Foo {
    public virtual bool Enabled;
    public virtual IList<Bar> Children;
}

class Bar {
    public virtual Foo Parent;
}

并想要计算Bar已启用Foo项目的所有项目数。

Session.Query<Foo>(x => x.Enabled).Cacheable().Sum(x => x.Children.Count)

但我收到Antlr.Runtime.NoViableAltException异常:

引发了“Antlr.Runtime.NoViableAltException”类型的异常。[.Sum[Foo](.Where[Foo](.CacheableFoo, Quote((x, ) => (x.Enabled)), ), Quote((x, ) => (x.Children.Count)), )]

如果我Bar像这样在客户端(加载所有项目)求和,一切正常:

Session.Query<Foo>(x => x.Enabled).Cacheable().ToList().Sum(x => x.Children.Count)

您能否建议在服务器端执行此操作的最佳决定?

4

2 回答 2

0

我认为这部分会Sum(x => x.Children.Count)导致问题。像这样重写您的查询:

Session.Query<Foo>(x => x.Enabled).Cacheable()
   .Select(x => x.Children.Count).Sum()
于 2013-01-16T09:02:08.440 回答
0

尝试

var childCount = (from x in Session.Query<Foo>()
                  from child in x.Children
                  where x.Enabled
                  select child).Count();

您应该能够在其中的某处添加 .Cacheable()(在 Query() 之后或 Count() 之前)。

于 2013-01-17T16:07:56.283 回答