Search code examples
c#.netlinqquerying

Linq min date max date model querying


I'm unable to find out on how to get the min date and max date from a dictionary collection.

My model class looks like this:

Dictionary<string, IList<ErrorModel>> errorList

public class ErrorModel
{
    public string Date { get; set; }
    public int Total { get; set; }
    public string Description { get; set; }
}

What I want to do get the min date and max date of the collection.

Hope anyone can help me out


Solution

  • You can use Linq's Enumerable.SelectMany to "flatten" the dictionary values, then use Min and Max methods:

    var minDate = errorList.SelectMany(s => s.Value).Min(v => v.Date);
    var maxDate = errorList.SelectMany(s => s.Value).Max(v => v.Date);
    

    However, your Date property is defined as a string, you may not get the results you expect. Updating the definition to DateTime will give the correct results using Min/Max.


    If you instead want to get the Min/Max per dictionary Key, you could project into an anonymous type:

    var perKeyMinMax = errorList.Select(d => new { d.Key, 
                                        Min = d.Value.Min(v => v.Date), 
                                        Max = d.Value.Max(v => v.Date) 
                                  });
    foreach (var item in perKeyMinMax)
    {
        Console.WriteLine($"Key: {item.Key}, Min: {item.Min}, Max: {item.Max}");
    }