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

2回ソートすると、キーと値の順序が混同されると思います。

最初に、正しくソートされたペアのリストを作成してください。

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 に答える