我有一个从Access DB填充的数据表。结果看起来像
Month | Sum
--------------
1 | 1464
2 | 1716
3 | 2125
4 | 2271
5 | 2451
6 | 2583
7 | 2671
9 | 2823
10 | 2975
你说得对 - 没什么可说的! 我想要的是,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月的值。我认为这是一个非常基本的东西,我做错了,但我根本无法搞清楚。 提前谢谢!
答案 0 :(得分:4)
您要求的所有月份都超过当月。
where p.Field<int>("M") >= i
因此,对于八月(8),你正在检索9月及更高(9,10,11,12),而不是7月(7)。
您必须反转您的约束,并按降序排序:
var numbers = (from p in dTable.AsEnumerable()
where p.Field<int>("M") <= i
select p)
.OrderByDesc(p => p.Month)
.First();
答案 1 :(得分: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();