gpt4 book ai didi

c# - 在用户之间获取最后一条消息的更短方法是什么

转载 作者:行者123 更新时间:2023-12-03 21:14:56 26 4
gpt4 key购买 nike

我正在编写类似于 WhatsApp 的消息程序。

我想显示用户和他/她的 friend 之间的最后一条消息。但要做到这一点,我会在它们之间获取完整的消息,并使用一些查询来查找最后一条消息。我认为我可以重写一个更好的方法。因为通过这种方式,我将所有信息都记在了内存中。如果我有一百万条消息,那不是一个好方法

    var myID = Convert.ToInt32(txtID.Text);
var myMessages = db.MemberMessages
.Where(m => m.MemberTo == myID || m.MemberFrom == myID)
.Select(s => new
{
s.ID,
s.Text,
s.MemberFrom,
s.MemberTo
});

List<int> messageIDs = myMessages
.Where(s => s.MemberTo == myID).Select(s => s.MemberFrom).Distinct().ToList();

List<int> messageIDs2 = myMessages
.Where(s => s.MemberFrom == myID)
.Select(s => s.MemberTo).Distinct().ToList();

List<int> differentIDS = messageIDs2.Except(messageIDs).ToList();

foreach (int item in differentIDS)
{
messageIDs.Add(item);
}

foreach (int userID in messageIDs)
{
var deger = myMessages
.Where(m =>
(m.MemberFrom == myID && m.MemberTo == userID) ||
(m.MemberFrom == userID && m.MemberTo == myID))
.OrderByDescending(m => m.ID).ThenByDescending(m => m.MemberFrom).First();

if (deger.MemberFrom == myID)
lstLastMessages.Items.Add(String.Format("From Me - To ID:{0} - Message: {1}", deger.MemberTo, deger.Text));
else
lstLastMessages.Items.Add(String.Format("From ID: {0} - To: Me -Message: {1}", deger.MemberFrom, deger.Text));
}

您可以看到用户和他/她的具有不同ID 的 friend 之间的最后一条消息。是否可以用一个查询重写它?或者更短的路?

寻求一些建议。

编辑: enter image description here

如您所见,我在用户中有一些记录。例如,我的ID是1,我想找到我之前和用户交谈的最后一条消息。

memberfrom 1 (its me)  memberfromTo : 2 . message: xxx memberfrom 2 (its me)  memberfromTo : 1 . message: yyymemberfrom 1 (its me)  memberfromTo : 2 . message: zzzz

如果你看上面,我想得到的最后一条消息是 zzzz。但我想为发送最后一条消息的每个用户都这样做。

最佳答案

只需按 MemberToMemberFrom 字段对消息进行分组,并从按 CreationTime 排序的每个组中获取最后一条消息:

var query = from m in db.MemberMessages
where m.MemberTo == id || m.MemberFrom == id
group m by new { m.MemberTo, m.MemberFrom } into g
select g.OrderByDescending(x => x.CreationTime).First();

这将返回来自用户和您正在寻找的用户的最后一条消息(因为组将有不同的 key )。

更新

var query = from m in db.MemberMessages
let msgTo = m.MemberTo == id
let msgFrom = m.MemberFrom == id
where msgTo || msgFrom
group m by msgTo ? m.MemberFrom : m.MemberTo into g
select g.OrderByDescending(x => x.CreationTime).First();

关于c# - 在用户之间获取最后一条消息的更短方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14424808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com