以下是层次结构和所需的功能
public class Friend
{
public string Name { get; set; }
public List<Message> Messages { get; set; }
}
public class Message
{
public string Text { get; set; }
public DateTime Time { get; set; }
}
现在需要的功能:
public List<string> WhatsApp(List<Friend> friends)
{
throw new NotImplementedException();
}
我需要按照消息时间戳的降序获取好友姓名列表。就像Whats App或任何其他IM一样。
我感觉这可以使用LINQ在1行或2行中完成,但由于我是LINQ的新手,无法深入解决问题。
提前感谢您的帮助。
答案 0 :(得分:4)
如果想要按最后一个(即最大)消息时间戳排序,则应执行以下操作:
return friends.OrderByDescending(f => f.Messages.Max(m => (DateTime?)m.Time))
.Select(f => f.Name)
.ToList();
当某个朋友没有消息时,需要转换为DateTime?
以避免异常。
通常,当您需要根据子属性按顺序对父有多个子项的父级进行排序时,它应该是一些聚合值(例如Sum
,Count
,Min
,{{ 1}}等。)。