我在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()