asp.net-mvc - AspNet 在请求查询时按用户名对消息进行分类
问题描述
我的数据库结构如下
public partial class AspNetUserMessage
{
public string From { get; set; }
public string To { get; set; }
public string Text { get; set; }
public System.DateTime SentDate { get; set; }
public Nullable<System.DateTime> ReadDate { get; set; }
public int Id { get; set; }
}
我有一个 API 点,它返回用户发送的所有消息,例如
[
{
"From": "0617c281-5488-4009-bf37-761f6cfea2df",
"To": "f54b7bf4-c7b5-482c-83b8-5b61e78ea398",
"Text": "i love this backend!!",
"SentDate": "2020-04-10T00:00:00",
"ReadDate": "2020-04-10T00:00:00",
"Id": 1
},
{
"From": "0617c281-5488-4009-bf37-761f6cfea2df",
"To": "f54b7bf4-c7b5-482c-83b8-5b61e78ea398",
"Text": "this is a sample msg",
"SentDate": "0001-01-01T00:00:00",
"ReadDate": null,
"Id": 2
},
{
"From": "0617c281-5488-4009-bf37-761f6cfea2df",
"To": "f54b7bf4-c7b5-482c-83b8-5b61e78ea398",
"Text": "id test",
"SentDate": "0001-01-01T00:00:00",
"ReadDate": null,
"Id": 3
},
{
"From": "0617c281-5488-4009-bf37-761f6cfea2df",
"To": "f54b7bf4-c7b5-482c-83b8-5b61e78ea398",
"Text": "blocked test",
"SentDate": "0001-01-01T00:00:00",
"ReadDate": null,
"Id": 4
},
{
"From": "0617c281-5488-4009-bf37-761f6cfea2df",
"To": "f54b7bf4-c7b5-482c-83b8-5b61e78ea398",
"Text": "blocked other way test",
"SentDate": "0001-01-01T00:00:00",
"ReadDate": null,
"Id": 5
},
{
"From": "0617c281-5488-4009-bf37-761f6cfea2df",
"To": "f54b7bf4-c7b5-482c-83b8-5b61e78ea398",
"Text": "date test",
"SentDate": "2020-04-11T00:00:00",
"ReadDate": null,
"Id": 6
},
{
"From": "0617c281-5488-4009-bf37-761f6cfea2df",
"To": "f54b7bf4-c7b5-482c-83b8-5b61e78ea398",
"Text": "date test",
"SentDate": "2020-04-11T00:00:00",
"ReadDate": null,
"Id": 7
},
{
"From": "0617c281-5488-4009-bf37-761f6cfea2df",
"To": "f54b7bf4-c7b5-482c-83b8-5b61e78ea398",
"Text": "id test",
"SentDate": "0001-01-01T00:00:00",
"ReadDate": null,
"Id": 8
},
{
"From": "0617c281-5488-4009-bf37-761f6cfea2df",
"To": "f54b7bf4-c7b5-482c-83b8-5b61e78ea398",
"Text": "id test",
"SentDate": "0001-01-01T00:00:00",
"ReadDate": null,
"Id": 9
}
]
我的代码如下:
public IEnumerable<AspNetUserMessage> GetAllMessages([FromBody]MessageRequest Request)
{
try
{
// Get all the messages sent or received by the user
var messages = db.AspNetUserMessages.Where(o => o.From == Request.From || o.To == Request.From).ToList();
return messages;
}
catch (Exception e)
{
// Log the error to the database
LogException(e);
return null;
}
}
我想要做的不是返回所有消息,而是返回消息的分类版本。例如
User1 向 User2 发送了 4 条消息;
User1 向 User3 发送了 2 条消息
对于 user1 输出应该是
[
{
"SentTo": "User2"
"Messages": [All 4 Messages sent to User2 here]
},
{
"SentTo": "User3"
"Messages": [All 2 Messages sent to User3 here]
}
]
如何修改我的 GetAllMessages 函数来实现这一点
解决方案
您必须创建一个使用您的 AspNetUserMessage 的新模型并填充它。
- 制作一个新模型,现在我将它命名为 SentMessagesModel
public class SentMessagesModel{
public string SentTo {get;set;}
public List<AspNetUserMessage> Messages {get;set;}
// All 4 Messages sent to User2 here
}
- 然后创建一个使用新模型的新控制器动作。使用下面的代码
public List<SentMessagesModel> GetAllMessages([FromBody]MessageRequest Request)
{
try
{
// Get all the messages sent or received by the user
var messages = db.AspNetUserMessages.Where(o => o.From == Request.From).ToList();
var groupByTo = messages.GroupBy(m=>m.To);
List<SentMessagesModel> sentMessages = new List<SentMessagesModel>();
foreach(var currentGroup in groupByTo){
sentMessages.Add(new SentMessagesModel(){ SentTo = currentGroup.Key, Messages = currentGroup.ToList() })
}
return sentMessages;
}
catch (Exception e)
{
// Log the error to the database
LogException(e);
return null;
}
}
推荐阅读
- powershell - 向一个用户添加多个邮箱时,无法处理参数“身份”错误上的参数转换
- c++ - 为什么 ./configure libbitcoin-system 在 Raspian Butch 上找不到 boost 库?
- java - 将一些复选框从一个 ActionListener 转移到另一个 ActionListener
- html - 如何为网页中的四个DIV定义css
- javascript - 倒计时完成后如何使用codeigniter自动更新数据库值
- r - 仅当在 mlr 中使用 parallelMap 时才会发生静默崩溃
- amazon-s3 - AWS S3 Presign URL 生成抛出 409 Conflicting Conditional Operation Exception
- javascript - 为什么 iframe DOM 操作可以从 Chrome 开发控制台工作,而不是直接加载 JS
- javascript - 使用敲除的字段验证
- linux - Yocto项目中image文件夹下的文件说明及Yocto linux的启动顺序