【问题标题】:nHibernate - subselect in select with order bynHibernate - 在选择中按顺序进行子选择
【发布时间】:2014-04-03 12:50:16
【问题描述】:

我与许多消息进行了对话,我想按照 ConversationMessages 表中最后一条消息的创建日期对对话进行排序。

我将如何在 nHibernate 的 queryOver 中编写这个。我应该使用 subQuery 吗?

select distinct c.ConversationId,
  (select max(CreatedDate) 
    from tConversationMessage mess where mess.ConversationId = c.ConversationId
  ) as LastMessage 
from tConversation c order by LastMessage

【问题讨论】:

    标签: c# sql nhibernate


    【解决方案1】:

    猜测您的 C# 命名,NHibernate 映射...这将是方式:

    Conversation conversation = null;
    ConversationMessage message = null;
    
    // the subselect of a max
    var subQuery = QueryOver.Of<ConversationMessage>(() => message)
        .Where(() => message.Conversation.ID == conversation.ID)
        .Select(Projections.Max("CreatedDate"));
    
    // the alias of the Conversation to be injected into subquery
    var query = session.QueryOver<Conversation>(() => conversation);
    
    // a select and group by (distinct) clause
    query.SelectList(l => l
        .SelectGroup(s => conversation.ID)
        .Select(Projections.SubQuery(subQuery))
        );
    
    // Order by the max Created date (asc)
    var list = query
        .OrderBy(Projections.SubQuery(subQuery))
            .Asc
        .List<object[]>()
        ;
    

    对于每个对话 ID,我们将获得 ConversationMessage 的 max(CreateDate)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多