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

时间:2018-05-06 10:29:37

标签: c# entity-framework linq

我有一个包含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

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

1 个答案:

答案 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();