C# EntityFramework-在LINQ查询中按无序对分组
我有一个包含4列的表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
**(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我发布了一个答案。这是你想要的还是我误解了你或者它不起作用?