Group by range using linq

c#, group-by, linq, range

Solution

var grouped = ranges.Select(r => new { 
            Price = r, 
            Count = data.Where(x => x.Price >= r).Count() });

And another option (if you have huge data, then grouping is better than enumerating all data for each price group):

var priceGroups = data.GroupBy(x => ranges.FirstOrDefault(r => r > x.Price))
                      .Select(g => new { Price = g.Key, Count = g.Count() })
                      .ToList();

var grouped = ranges.Select(r => new
{
    Price = r,
    Count = priceGroups.Where(g => g.Price > r || g.Price == 0).Sum(g => g.Count)
});

Problem

how can we use groupped ranges for equal or greater than ? ``` var data = new[] { new { Id = 0, Price = 2 }, new { Id = 1, Price = 10 }, new { Id = 2, Price = 30 }, new { Id = 3, Price = 50 }, new { Id = 4, Price = 120 }, new { Id = 5, Price = 200 }, new { Id = 6, Price = 1024 }, }; var ranges = new[] { 10, 50, 100, 500 }; var grouped = data.GroupBy( x => ranges.FirstOrDefault( r => r > x.Price ) ); grouped ouput is price 10-50 -> 3 price 50-100 -> 1 price 100-500 -> 2 ``` Needed output is grouped by equal or greater than the range used ``` price >= 10 -> 6 price >= 50 -> 4 price >= 100 -> 3 price >= 500 -> 1 ```

Original source

Related problems