Итак, я создаю систему обмена сообщениями. В настоящее время я нахожусь на странице «Список сообщений», мне нужно, чтобы она отображала список всех разговоров, которые ведет текущий пользователь. В настоящее время он отображает все сообщения, отправленные и полученные пользователем, как отдельные объекты внутри массива. Мне нужно, чтобы он отображал только самое последнее сообщение, которое пользователь получает для каждого разговора с другим пользователем. В приведенном ниже примере должно отображаться только 2 разговора, потому что senderUsername и recipientUsername совпадают в двух примерах, но вместо этого он показывает все сообщения, а не самое последнее. Причина, по которой он это делает, в том, как я построил модель. Есть ли способ заставить его делать то, что я хочу, без изменения модели
Модель:
public class Messages
{
public int Id { get; set; }
public int SenderId { get; set; }
public int RecipientId { get; set; }
public string SenderUsername { get; set; }
public string RecipientUsername { get; set; }
public int ItemId { get; set; }
public string Message { get; set; }
public bool Read { get; set; }
public DateTime DateTimeSent { get; set; }
}
Код:
public IQueryable GetMessageList(string currentUsername)
{
var currentUser = _context.Users.FirstOrDefault(x => x.Username == currentUsername);
var currentUserId = currentUser.Id;
var messageList = _context.Messages.Where(x => x.SenderId == currentUserId || x.RecipientId == currentUserId).OrderByDescending(x => x.DateTimeSent);
return messageList;
}
Вывод:
[
{
"id": 4,
"senderId": 2,
"recipientId": 1,
"senderUsername": "dylan_costello_",
"recipientUsername": "jxchumber",
"itemId": 0,
"message": "MessagesForSendingDto.Message",
"read": false,
"dateTimeSent": "2020-05-07T17:47:04.5268228"
},
{
"id": 3,
"senderId": 1,
"recipientId": 2,
"senderUsername": "jxchumber",
"recipientUsername": "dylan_costello_",
"itemId": 0,
"message": "MessagesForSendingDto.Message",
"read": false,
"dateTimeSent": "2020-05-07T17:39:12.4228305"
},
{
"id": 2,
"senderId": 1,
"recipientId": 3,
"senderUsername": "jxchumber",
"recipientUsername": "pavster31",
"itemId": 0,
"message": "MessagesForSendingDto.Message",
"read": false,
"dateTimeSent": "2020-05-07T17:38:38.950303"
},
{
"id": 1,
"senderId": 1,
"recipientId": 3,
"senderUsername": "jxchumber",
"recipientUsername": "pavster31",
"itemId": 0,
"message": "MessagesForSendingDto.Message",
"read": true,
"dateTimeSent": "2020-05-07T17:31:25.3077606"
}
]