C# EntityFramework-在LINQ查询中按无序对分组

C# EntityFramework-在LINQ查询中按无序对分组,c#,entity-framework,linq,C#,Entity Framework,Linq,我有一个包含4列的表**(User\u from、User\u 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

我有一个包含4列的表
**(User\u from、User\u 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

当我试图使用我的查询时,我得到了两条记录。我只需要根据日期的最后一个键。

GroupBy
中,您可以创建一个条件键,这样当您想要按顺序无关紧要的一对值进行分组时,您可以将键构造为匿名类型,第一个属性设置为最小值,第二个属性设置为最大值

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();
var all=从m开始,单位为db.Peers
其中m.User_Id_To==Id | | m.User_Id_From==Id
m组由新
{ 
Min=m.User\u Id\u Tom.User\u Id\u From?m.User\u Id\u To:m.User\u Id\u From
} 
进入g
选择g.OrderByDescending(x=>x.Date).FirstOrDefault();

这将只返回一个值,我需要用户参与的每个对话都有一个值,为什么要分组?看起来你可以只按id筛选(就像你现在做的那样),然后按日期排序,然后取第一条(同样像你现在做的那样),而不分组。按日期排序只会得到该用户的最后一条消息,而不是该用户的所有聊天。@yazan我发布了一个答案。这是你想要的还是我误解了你或者它不起作用?