我有一个包含4列**(User_from, User_to,Message,Date)**
我需要获取用户在所有参与者聊天中的最后一条消息。
var all = from m in db.Peers
where m.User_Id_To == id || m.User_Id_From == id
group m by new { m.User_Id_To, m.User_Id_From } into g
select g.OrderByDescending(x => x.Date).FirstOrDefault();
上面的代码用于获取每个id的最后一条消息, 但仍有问题。
考虑以下2条记录:
User_from User_To Content Date
1 2 hi 01-01-2018
2 1 wlc 02-02-2018
当我尝试使用我的查询时,我得到了两个记录。我根据日期只需要最后一个。
答案 0 :(得分:2)
在GroupBy
中你可以创建一个条件键,所以当你想按顺序无关紧要的一对值进行分组时,你可以将键构造为一个匿名类型,第一个属性设置为min值,第二到最大值。
var all = from m in db.Peers
where m.User_Id_To == id || m.User_Id_From == id
group m by new
{
Min = m.User_Id_To < m.User_Id_From ? m.User_Id_To : m.User_Id_From,
Max = m.User_Id_To > m.User_Id_From ? m.User_Id_To : m.User_Id_From
}
into g
select g.OrderByDescending(x => x.Date).FirstOrDefault();