使用Linq从分组和过滤的对象列表中仅获取第一个对象

时间:2014-02-14 22:02:52

标签: c# linq

您好我有一个CalendarData列表,我按照列表的小时对对象进行分组后得到了具有最大EventValue的对象。

问题在于,当我在同一小时范围内有两个CalandarData且具有相同的Max EventValue时,我得到两个{第一个

我不知道在哪里可以对此语法应用.First()扩展方法。任何好主意谢谢

List<CalendarData> listData =
    filteredlistCalendarData.GroupBy(element => element.StartTime.Hour)
                            .SelectMany(
                                 group => group.Where(element => element.EventValue == group.Max(obj => obj.EventValue))
                                               .Take(1))
                            .ToList();

1 个答案:

答案 0 :(得分:0)

使用OrderByDescendingFirstOrDefault

                             group => group.OrderByDescending(e => e.EventValue)
                                           .FirstOrDefault()

要使其有效,请用SelectMany替换Select来电:

filteredlistCalendarData.GroupBy(element => element.StartTime.Hour)
                        .Select(
                             group => group.OrderByDescending(e => e.EventValue)
                                           .FirstOrDefault())
                        .ToList();