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;
}
}

我想做的不是返回所有消息,而是返回消息的分类版本。E.g

User1向User2发送了4条消息;

User1向User3 发送了2条消息

对于用户1,输出应为

[
{
"SentTo": "User2"
"Messages": [All 4 Messages sent to User2 here]
},
{
"SentTo": "User3"
"Messages": [All 2 Messages sent to User3 here]
}
]

如何修改我的GetAllMessages功能来实现这一点

您必须创建一个使用AspNetUserMessage的新模型并填充它。

  1. 创建一个新模型,目前我将其命名为SentMessagesModel
public class SentMessagesModel{
public string SentTo {get;set;}
public List<AspNetUserMessage> Messages {get;set;}
// All 4 Messages sent to User2 here
}
  1. 然后使用新模型进行新的控制器操作。使用以下代码
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;
}
}

最新更新