NHibernate LINQ解决方案计算SUM



我在SQL Server 2012中使用NHibernate 3.3.1.4000和FluentNHibernate 1.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 exception:

Antlr.Runtime类型异常。抛出NoViableAltException'。[.Sum Foo(其中(Foo)。CacheableFoo " ((x) => (x.Enabled)),),引用((x) => (x.Children.Count)),)

如果我在客户端做sum(加载所有Bar项目),就像这样:

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

你能建议在服务器端做这个最好的决定吗?

Try

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

你应该能够在某处添加。cacheable () (Query()之后或Count()之前)。

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

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

相关内容

  • 没有找到相关文章

最新更新