我正在尝试获取与给定用户的最新联系,按用户分组:
public class ChatMessage
{
public string SentTo { get; set; }
public string SentFrom { get; set; }
public string MessageBody { get; set; }
public string SendDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
用户的联系信息可以是SentTo或SentFrom.
List<ChatMessage> ecml = new List<ChatMessage>();
var q = ecml.OrderByDescending(m => m.SendDate).First();
Run Code Online (Sandbox Code Playgroud)
会给我最新的消息,但我需要每个用户的最后一条消息.我能找到的最接近的解决方案是LINQ Max Date with group by,但我似乎无法找出正确的语法.如果我不需要,我宁愿不创建多个List对象.如果用户的信息在SentTo,我的信息将在SentFrom,反之亦然,所以我确实有一些方法来检查用户的数据在哪里.
我提到过我对LINQ很新吗?任何帮助将不胜感激.
由于您需要将每条记录解释两次 - 即解释为 aSentTo和 a SentFrom,因此查询变得有点棘手:
var res = ecml
.SelectMany(m => new[] {
new { User = m.SentFrom, m.SendDate }
, new { User = m.SentTo, m.SendDate }
})
.GroupBy(p => p.User)
.Select(g => new {
User = g.Key
, Last = g.OrderByDescending(m => m.SendDate).First()
});
Run Code Online (Sandbox Code Playgroud)
关键技巧在于SelectMany,它将每个项目分成两个匿名项目 - 一个将用户与ChatMessage配对,另一个将用户与相同日期配对。SentFromSendDateSentTo
一旦您将两条记录都放入可枚举中,剩下的事情就很简单:按用户分组,然后将帖子中的查询应用到每个组。
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |