首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate分组查询

NHibernate分组查询
EN

Stack Overflow用户
提问于 2015-07-16 20:10:31
回答 1查看 78关注 0票数 0

我有一张这样的桌子

代码语言:javascript
复制
Id   |  Ref    |   Field1
1       Myles1     Blah
2       Myles1     Rubarb
3       Myles2     Custard
4       Ted        Cheese

我希望通过NHibernate会话查询它,以便返回包含给定搜索字符串的每个引用的第一行,因此,如果搜索项为'Myles‘,则结果集将为

代码语言:javascript
复制
Id   |  Ref    |   Field1
1       Myles1     Blah
3       Myles2     Custard

像这样的流畅映射

代码语言:javascript
复制
public class EntityClassMap : ClassMap<Entity>
{
    public EntityClassMap()
    {
        Id(x => x.Id);
        Map(x => x.Ref);
        Map(x => x.Field1);           
    }
}
EN

回答 1

Stack Overflow用户

发布于 2015-07-16 20:35:43

有一个详细的描述,我们可以如何进行复杂的查询(使用HAVING__,GROUP BY__):Query on HasMany reference

以防万一,我们想找出这样的实体,其中具有按Ref,分组的Min(Id)我们将需要subquery。它可能看起来像这样:

代码语言:javascript
复制
// alias for inner query
MyEntity inner = null;
// this alias is for outer query, and will be used in 
// inner query as a condition in the HAVING clause
MyEntity outer = null;

var minIdSubquery = QueryOver.Of<MyEntity>(() => inner)
    .SelectList(l => l
        .SelectGroup(() => inner.Ref) // here we GROUP BY
        .SelectMin(() => inner.Id)
    )
    // HAVING to get just Min(id) match
    .Where(Restrictions.EqProperty(
      Projections.Min<MyEntity>(i => i.Id),
      Projections.Property(() => outer.Id)
    ));

// outer query
var query = session.QueryOver<MyEntity>(() => outer)
    .WithSubquery
    // we can now use EXISTS, because we applied match in subquery
    .WhereExists(minIdSubquery);

在文档16.8. Subquerieshere中查看更多信息

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31453784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档