Добрый день,
Спасибо за ваше время.
Я хочу получать последние сообщения таблицы чата по 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.....
Спасибо
сказать по правде, я действительно застрял здесь....
Итак, вы хотите получить каждый ProjectId с его максимальным SendDate в виде списка, упорядоченного по SendDate? Я не понимаю, почему вам нужно использовать inner join здесь.
Мне нужно получить все сообщения из чата за столом (видите ли, например, в WhatsApp вы просто видите предварительный просмотр последнего сообщения в чате). внутреннее соединение для фильтрации
@evvk, если мой ответ вам подойдет. Пожалуйста, примите это.





Вы можете сначала запросить внутреннюю часть, как показано ниже:
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);
Что ж, ребята, похоже, у linq entity framework есть свои преимущества. этот запрос лучше и получает последнее сообщение, отправленное в последний проект
var ultimos = await _dbContext.chatTable .GroupBy(item => item.ProjectId)
.Select(group => new { pId= group.Key, latestMessage= group.OrderByDescending(r=>r.SendDate)
.FirstOrDefault() })
.ToListAsync();
и все сообщения находятся внутри объекта
Этот запрос должен делать то, что вы хотите
_dbContext.ChatTable
.GroupBy(c => c.ProjectId)
.Select(g => g
.OrderByDescending(c => c.SendDate)
.First())
.OrderBy(c => c.SendDate);
Это должно дать то, что вам нужно:
_dbContext.chatTable
.GroupBy(c => c.ProjectId)
.Select(g => g.OrderBy(c => c.SendDate).LastOrDefault())
Пожалуйста, поделитесь, какие попытки linq вы пробовали. Есть много вопросов и ресурсов linq, которые помогут с этим. Мы можем помочь исправить ваши попытки