перевести sql в linq метод расширения внутреннее соединение с выбранной группой - PullRequest
0 голосов
/ 05 июля 2019

Добрый день,

Спасибо за ваше время.

Я хочу получать последние сообщения из таблицы чата по 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 с объединением, которое приносит последний идентификатор проекта и последнее сообщение.

Как я могу получить linq с методами расширения?

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

Спасибо

Ответы [ 4 ]

1 голос
/ 05 июля 2019

Сначала вы можете запросить внутреннюю часть, как показано ниже:

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);
0 голосов
/ 05 июля 2019

Это должно дать то, что вам нужно:

_dbContext.chatTable
  .GroupBy(c => c.ProjectId)
  .Select(g => g.OrderBy(c => c.SendDate).LastOrDefault())
0 голосов
/ 05 июля 2019

Этот запрос должен делать то, что вы хотите

_dbContext.ChatTable
    .GroupBy(c => c.ProjectId)
    .Select(g => g
        .OrderByDescending(c => c.SendDate)
        .First())
    .OrderBy(c => c.SendDate);
0 голосов
/ 05 июля 2019

Ну, ребята, похоже, что у сущности linq есть свои преимущества этот запрос лучше и получает последнее сообщение, отправленное в последний проект

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

и все сообщения находятся внутри сущности

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...