如何在列表列表中获取最小的DateTime /值-使用LINQ

时间:2018-12-12 09:35:50

标签: c# linq

我有一个'事件'的列表,每个有DateTime列表, 喜欢:

var events = new List<Event>(){
  new Event("A"){Occured = new List<DateTime>{"1.1.2018", "3.3.2018"}},
  new Event("B"){Occured = new List<DateTime>{"4.4.2018", "5.5.2018"}}};

如何在所有DateTime中找到一个最古老的 events

我试图结合级联的OrderByDescending().First()来找到列表中最旧的 ...但是没有运气

(请对 LINQ 使用方法语法;-)谢谢)

2 个答案:

答案 0 :(得分:5)

尝试SelectMany以便将每个事件中的列表展平IEnumerable<DateTime>中:

DateTime oldest = events
  .SelectMany(e => e.Occured) // Now we have IEnumerable<DateTime>
  .Min(); 

如果您想要一个具有最短(最短)日期的事件,则可以Aggregate

var oldestEvent = events
  .Where(s => s.Ocurred.Any()) // To be on the safe side
  .Aggregate((s, a) => s.Ocurred.Min() < a.Ocurred.Min() ? s : a); 

答案 1 :(得分:0)

这将为您提供帮助

DateTime smallest_date = events.First().Occured.First();
        foreach (var eve in events)
        {
            eve.Occured.Sort();
            var temp = eve.Occured.First();
            if (temp.CompareTo(smallest_date) < 0)
            {
                smallest_date = temp;
            }
        }
        Console.WriteLine(smallest_date);