EntityFramework - Группировка по неупорядоченной паре в запросе LINQ - PullRequest
0 голосов
/ 06 мая 2018

У меня есть таблица, которая содержит 4 столбца **(User_from, User_to,Message,Date)**

Мне нужно получить последнее сообщение пользователя во всех чатах участника.

var all = from m in db.Peers
                      where m.User_Id_To == id || m.User_Id_From == id
                      group m by new { m.User_Id_To, m.User_Id_From } into g
                      select g.OrderByDescending(x => x.Date).FirstOrDefault();

Код выше работает, чтобы получить последнее сообщение для каждого идентификатора, но все еще есть проблема.

Подумайте о том, чтобы иметь следующие 2 записи:

 User_from     User_To    Content   Date

    1             2          hi       01-01-2018
    2             1          wlc      02-02-2018

Когда я пытаюсь использовать свой запрос, я получаю обе записи. Мне просто нужен последний согласно дате.

1 Ответ

0 голосов
/ 06 мая 2018

В GroupBy вы можете создать условный ключ, поэтому, когда вы хотите сгруппировать по паре значений, где порядок не имеет значения, вы можете создать ключ как анонимный тип с первым свойством, установленным на минимальное значение, а вторым на максимальное значение.

var all = from m in db.Peers
    where m.User_Id_To == id || m.User_Id_From == id
    group m by new 
    { 
        Min = m.User_Id_To < m.User_Id_From ? m.User_Id_To : m.User_Id_From,     
        Max = m.User_Id_To > m.User_Id_From ? m.User_Id_To : m.User_Id_From 
    } 
    into g
    select g.OrderByDescending(x => x.Date).FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...