Ale*_*oni 0 c# linq asp.net-mvc lambda
试图在MVC 4 C#中对饼图的图例进行排序.该图表显示按商品编号销售的产品数量.在图例中,我想显示项目编号,然后显示已售出的编号,然后显示已售出的百分比,并按销售的数量按降序排序.
我已经得到了"Y"值(#已售出)以便正确订购,但在尝试订购"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());
Run Code Online (Sandbox Code Playgroud)
任何正确方向的帮助或推动都会很棒.如果还有其他任何我可以发布的内容可能会丢失,请告诉我.
谢谢.
编辑:忘了我试图在以上版本的上述代码中使用匿名类型..
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());
Run Code Online (Sandbox Code Playgroud)
编辑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
Run Code Online (Sandbox Code Playgroud)
结果具有查询的所有正确ItemNumbers和所有#Sold但不匹配ItemNumbers到正确的#Sold.我可以重新编写代码,以便ItemNumbers和#Sold匹配,但只按ItemNumber排序,我真的想按#Sold订购.希望这能让我们更清楚问题是什么以及我希望看到的是什么.
我认为通过排序两次,你会混淆键和值的顺序.
确保首先创建正确排序的对列表:
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();
Run Code Online (Sandbox Code Playgroud)
然后做绑定:
mySeries.Points.DataBindXY(data.Select(x => x.ItemNumber)
,data.Select(x => x.Count));
Run Code Online (Sandbox Code Playgroud)