LINQ lambda orderbydownon group by key.count()返回用于图表图例排序的gro
本文关键字:用于 排序 gro 返回 group orderbydownon lambda by key count LINQ | 更新日期: 2023-09-27 18:07:27
尝试在MVC 4 c#中排序饼状图的图例。该图表根据产品编号显示售出的产品数量。在图例中,我想显示商品编号,然后是销售数量,然后是销售百分比,并按销售数量降序排列。
我已经让"Y"值(# sold)正确排序,但在试图排序"X"值时,它们最终混乱,不匹配正确的"Y"值。
在我看来,我应该只需要按项目编号分组数据,然后按匿名类型的项目编号和项目编号计数选择数据,然后根据项目编号计数降序排序,然后再次选择这次只以正确顺序获取项目编号的列表字符串。
有一个合理的机会,上面的工作很好,问题更多地在于我几乎完全缺乏对DataBindXY
方法如何在图表中工作的理解。
var data = srv.GetTSMMetricData(Mode, Territories, selectedTerritory).GroupBy(x => x.ItemNumber).ToList();
var xValues = data.Select(x => x.Key).OrderByDescending(x => x.Count()).ToList();
mySeries.Points.DataBindXY(xValues, data.Select(x => x.Count()).OrderByDescending(x => x).ToList());
任何在正确方向上的帮助或推动都会很棒。如果还有什么我可以贴出来的可能缺失的东西,请告诉我。
谢谢。
编辑:忘了我在上面代码的前一个版本中试图使用匿名类型..
var xValues = data.Select(x => new { Item = x.Key, Count = x.Key.Count() }).OrderByDescending(x => x.Count).ToList();
mySeries.Points.DataBindXY(xValues.Select(x => x.Item).ToList(), data.Select(x => x.Count()).OrderByDescending(x => x).ToList());
编辑2:当前结果示例(前5个图例条目)..
ItemNumber - # Sold - % Sold ----- Correct ItemNumber for # Sold
-------------------------------------------------------------
8500 42 (20.79)% PRS
JOL 19 (9.41)% JOL
280 18 (8.91)% ENV
171 13 (6.44)% AMR
172 12 (5.94)% GRD
Note: 38 rows of total results
结果包含查询的所有正确的ItemNumbers和所有的# Sold,但是ItemNumbers与正确的# Sold不匹配。我可以重写代码,使ItemNumbers和# Sold匹配,但只按ItemNumber排序,而我真的想按# Sold排序。希望这能让你更清楚问题是什么,以及我希望看到发生什么。
我认为排序两次会混淆键和值的顺序。
确保您首先创建了一个正确排序的pair列表:
var data = srv.GetTSMMetricData(Mode, Territories, selectedTerritory)
.GroupBy(x => x.ItemNumber)
.Select( x => new
{
ItemNumber = x.Key,
Count = x.Count()
} )
.OrderByDescending(x => x.Count)
.ToList();
然后执行绑定:
mySeries.Points.DataBindXY(data.Select(x => x.ItemNumber)
,data.Select(x => x.Count));
GroupBy
返回IEnumerable<IGrouping<TKey,TEntity>
计算每组中对象的个数:
srv.GetTSMMetricData(Mode, Territories, selectedTerritory)
.GroupBy(x => x.ItemNumber)
.Select( x => new
{
ItemNumber = x.Key,
Count = x.Count()
} );