1

SQL Server 2012 にNHibernate3.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ます:

タイプ「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

試す

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 に答える
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 に答える