Csharp/C#教程:按范围分组使用linq分享


按范围分组使用linq

我们如何使用分组范围等于或大于?

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 

所需输出的分组等于或大于使用的范围

 price >= 10 -> 6 price >= 50 -> 4 price >= 100 -> 3 price >= 500 -> 1 

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

另一种选择(如果您有大量数据,那么分组比枚举每个价格组的所有数据更好):

 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) }); 

对源进行分组,每个项目都分配给一个组。

你有什么是一个良好的开端:

 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 ) ); 

跟进:

 int soFar = 0; Dictionary counts = grouped.ToDictionary(g => g.Key, g => g.Count()); foreach(int key in counts.Keys.OrderByDescending(i => i)) { soFar += counts[key]; counts[key] = soFar; } 

或者,如果您想在一个linq语句中执行此操作:

上述就是C#学习教程:按范围分组使用linq分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!

 int soFar = 0; var grouped = data .GroupBy( x => ranges.FirstOrDefault( r => r <= x.Price ) ) .OrderByDescending(g => g.Key) .Select(g => { soFar += g.Count(); return new Tuple(g.Key, soFar) }); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1019004.html

(0)
上一篇 2022年1月4日
下一篇 2022年1月4日

精彩推荐