Nhibernate 从GroupBy键中选择对象

Nhibernate 从GroupBy键中选择对象,nhibernate,linq-to-nhibernate,Nhibernate,Linq To Nhibernate,我习惯于GroupBy()与其说是一门科学,不如说是一门艺术,但也许有人能帮我解决一个非常具体的问题: 给定以下代码 var results = session.Query<MyClass>() .GroupBy(c => c.OtherPersistentObject) .Select(group => new { key = group.Key, count = group.Count() }) .ToList(); 这给了我一个SQL错误“列'ot

我习惯于GroupBy()与其说是一门科学,不如说是一门艺术,但也许有人能帮我解决一个非常具体的问题:

给定以下代码

var results = session.Query<MyClass>()
.GroupBy(c => c.OtherPersistentObject)
.Select(group => new
{
    key = group.Key,
    count = group.Count()
})
.ToList();
这给了我一个SQL错误“
列'otherclass.ID'在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中

有没有办法让Select做我想做的事情

TIA

试试这个:

var results = session
    .Query<MyClass>()
    .GroupBy(c => c.OtherPersistentObject)
    .Select(group => new
    {
        key = group.Key.Id,
        count = group.Count()
    })
    .ToList();
var结果=会话
.Query()
.GroupBy(c=>c.OtherPersistentObject)
.选择(组=>新建
{
key=group.key.Id,
count=group.count()
})
.ToList();
您可以找到错误的原因。

尝试以下操作:

var results = session
    .Query<MyClass>()
    .GroupBy(c => c.OtherPersistentObject)
    .Select(group => new
    {
        key = group.Key.Id,
        count = group.Count()
    })
    .ToList();
var结果=会话
.Query()
.GroupBy(c=>c.OtherPersistentObject)
.选择(组=>新建
{
key=group.key.Id,
count=group.count()
})
.ToList();

您可以找到错误的原因。

这是一个已知的NHibernate问题

作为一种解决方法,您可以使用本文中描述的最后一种方法(将GroupByPart重写为子查询)。因此,您的查询可以重写为以下内容:

var results = session.Query<MyClass>()
        .Where(c => c == session.Query<MyClass>().First(cs => cs.OtherPersistentObject == c.OtherPersistentObject))
        .Select(x => new
        {
            key = x.OtherPersistentObject, 
            count = session.Query<MyClass>().Count(cs => cs.OtherPersistentObject == x.OtherPersistentObject)
        }).ToList();
var results=session.Query()
.Where(c=>c==session.Query().First(cs=>cs.OtherPersistentObject==c.OtherPersistentObject))
.选择(x=>new
{
key=x.OtherPersistentObject,
count=session.Query().count(cs=>cs.OtherPersistentObject==x.OtherPersistentObject)
}).ToList();

这是一个众所周知的NHibernate问题

作为一种解决方法,您可以使用本文中描述的最后一种方法(将GroupByPart重写为子查询)。因此,您的查询可以重写为以下内容:

var results = session.Query<MyClass>()
        .Where(c => c == session.Query<MyClass>().First(cs => cs.OtherPersistentObject == c.OtherPersistentObject))
        .Select(x => new
        {
            key = x.OtherPersistentObject, 
            count = session.Query<MyClass>().Count(cs => cs.OtherPersistentObject == x.OtherPersistentObject)
        }).ToList();
var results=session.Query()
.Where(c=>c==session.Query().First(cs=>cs.OtherPersistentObject==c.OtherPersistentObject))
.选择(x=>new
{
key=x.OtherPersistentObject,
count=session.Query().count(cs=>cs.OtherPersistentObject==x.OtherPersistentObject)
}).ToList();

不太了解NHibernate,但似乎无法很好地转换对象分组:。不太了解NHibernate,但似乎无法很好地转换对象分组:。谢谢,@core,但我想选择其他PersistentObject本身,而不是它的Id——否则我必须单独调用才能获取对象。谢谢,@core,但我想选择OtherPersistentObject本身,而不是它的Id——否则我必须单独调用才能获取对象。