【问题标题】:translate sql to linq extension method inner join with select group by使用 select group by 将 sql 转换为 linq 扩展方法内部联接
【发布时间】:2019-07-05 08:05:24
【问题描述】:

早安,

感谢您的宝贵时间。

我想通过 userId 和 projectId 获取聊天表的最新消息,这工作正常

 select * from chatTable inner join 
 (select max(SendDate) maxtime,[ProjectId]   from [chatTable]       
group by [ProjectId])latest
on latest.maxtime=chatTable.SendDate and
latest.[ProjectId]=chatTable.[ProjectId]
order by SendDate

如您所见,我正在从 chatTable 获取最新消息,并带有一个带来最新项目 id 和最新消息的连接。

我怎样才能有一个带有扩展方法的 linq?

var messages= await _dbContext.chatTable.....

谢谢

【问题讨论】:

  • 请分享您尝试过的 linq 尝试是什么。有许多 linq 问题和资源可以帮助解决这个问题。我们可以帮助纠正您的尝试
  • 说实话我真的被困在这里了......
  • 所以您想将每个ProjectId 的最大值SendDate 作为由SendDate 排序的列表吗?我不明白你为什么需要在这里使用inner join
  • 我需要从桌面聊天中获取所有消息(例如,在 wtsp 中,您只看到聊天中最新消息的预览)。内连接是过滤
  • @evvk,如果我的回答对你有用。请接受。

标签: c# entity-framework linq


【解决方案1】:

您可以先查询内部部分,如下所示:

var latest= _dbContext.chatTable.GroupBy(x=>x.ProjectId).Select(x=>new {maxTime=x.Max(y=>y.SendDate), ProjectId=x.Key });
var res=(from ct in _dbContext.ChatTable 
join la in latest on la.maxTime equals ct.SendDate and la.ProjectId equals ct.ProjectId).ToList().OrderBy(x=>x.SendDate);

【讨论】:

    【解决方案2】:

    这个查询应该做你想做的事

    _dbContext.ChatTable
        .GroupBy(c => c.ProjectId)
        .Select(g => g
            .OrderByDescending(c => c.SendDate)
            .First())
        .OrderBy(c => c.SendDate);
    

    【讨论】:

      【解决方案3】:

      这应该可以满足您的需求:

      _dbContext.chatTable
        .GroupBy(c => c.ProjectId)
        .Select(g => g.OrderBy(c => c.SendDate).LastOrDefault())
      

      【讨论】:

        【解决方案4】:

        伙计们,看来linq实体框架有它的优势 这个查询比较好,获取最新消息发送到最新项目

            var ultimos = await _dbContext.chatTable .GroupBy(item => item.ProjectId)
             .Select(group => new { pId= group.Key, latestMessage= group.OrderByDescending(r=>r.SendDate)
            .FirstOrDefault() })
             .ToListAsync();
        

        所有消息都在实体内部

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-17
          • 1970-01-01
          • 2023-03-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多