1

Access DB から取り込まれたデータテーブルがあります。結果は次のようになります

Month | Sum
--------------
1 | 1464
2 | 1716
3 | 2125
4 | 2271
5 | 2451
6 | 2583
7 | 2671
9 | 2823
10 | 2975

あなたは正しいです-8月には何もありません!私が欲しいのは、8月には7月と同じ値が使用されることです。現在、この LINQ クエリを使用してデータを折れ線グラフに追加しています。

for (int i = 1; i <= System.DateTime.Now.Month; i++)
            {
                var numbers = (from p in dTable.AsEnumerable()
                              where p.Field<int>("M") >= i
                              select p).First();                   
                series2.Points.Add(new DataPoint { AxisLabel = i.ToString(), YValues = new double[] { Convert.ToDouble(numbers["Sum"]) } });  
            }

チャートが示されていますが、8 月については 9 月の値が使用されます。私が間違っているのは非常に基本的なことだと思いますが、それを理解することはできません。前もって感謝します!

4

2 に答える 2

4

現在の月より後のすべての月を要求しています。

where p.Field<int>("M") >= i

したがって、8 月 (8) の場合、7 月 (7) ではなく、9 月以降 (9、10、11、12) を取得しています。

制約を逆にして、月の降順で並べ替える必要があります。

var numbers = (from p in dTable.AsEnumerable()
                          where p.Field<int>("M") <= i
                          select p)
                         .OrderByDesc(p => p.Month) 
                         .First();   
于 2013-10-28T16:15:44.243 に答える
2

ロジックを反転する必要があります。

var numbers = (from p in dTable.AsEnumerable()
               where p.Field<int>("M") <= i
               select p).Last();

言うまでもなく、前月がない場合、これは機能しません。

アップデート:

上記は、読み込んでいるテーブルが順序付けられていることを前提としています。そうでない場合は、自分で注文する必要があります (Cyril Gandon が述べたように):

var numbers = (from p in dTable.AsEnumerable()
               where p.Field<int>("M") <= i
               orderby p.Field<int>("M") descending
               select p).First();
于 2013-10-28T16:25:35.450 に答える