c# - 如果属性已存在于同一数组.net 中的另一个对象中,如何不显示对象
问题描述
所以我正在创建一个消息传递系统。我目前在“消息列表”页面上,我需要它来显示当前用户拥有的所有对话的列表。目前,它将用户发送和接收的所有消息显示为数组内的单个对象。我需要它只显示用户在与另一个用户的每次对话中收到的最新消息。在下面的示例中,它应该只显示 2 个对话,因为在 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"
}
]
解决方案
尝试将您的 GetMessageList 更改为以下内容:
public IEnumerable<IEnumerable<Messages>> 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)
.ToList()
.GroupBy(x => new
{
Smaller = x.SenderId < x.RecipientId ? x.SenderId : x.RecipientId,
Greater = x.SenderId > x.RecipientId ? x.SenderId : x.RecipientId,
})
.Select(x => x.OrderByDescending(p => p.DateTimeSent).Take(2));
return messageList;
}
推荐阅读
- javascript - 查找数组中的重复对
- sql - READ COMMITTED 或 SERIALIZABLE
- amazon-web-services - 从 AWS Educate 账户 Cloud9 控制台部署 SAM 脚本时出错
- python - 如何去除python pyqt5滚动条中的透明性
- node.js - 如何使用服务帐户访问 GSuite 电子邮件帐户的 GMAIL API
- python - 如何使用 matplotlib 使文本居中?
- php - PEAR 错误 + Open Server 和 Opencart 项目
- javascript - Mousedown 和 mouseup 同时以角度触发
- c# - 客户端和主机应用程序之间通过 Internet 进行 C# 低延迟通信
- java - Java Immutables Polymorphism - 如何使生成的类扩展另一个类?