0

试图在 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());

任何朝着正确方向的帮助或推动都会很棒。让我知道是否还有其他我可以发布的内容可能会丢失。

谢谢。

编辑:忘记了我试图在上述代码的早期版本中使用匿名类型..

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 排序。希望这可以更清楚地说明问题所在以及我希望看到的情况。

4

2 回答 2

5

我认为通过两次排序,您可以混淆键和值的顺序。

确保首先创建正确排序的对列表:

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));
于 2013-04-03T18:41:08.770 回答
0

GroupBy返回一个IEnumerable<IGrouping<TKey,TEntity>

要计算每个分组中的对象数:

srv.GetTSMMetricData(Mode, Territories, selectedTerritory)
    .GroupBy(x => x.ItemNumber)
    .Select( x => new
        {
            ItemNumber = x.Key,
            Count = x.Count()
        } );
于 2013-04-03T18:24:07.860 回答