for (int i = 1; i < 31; i++)
{
var getData = "SELECT * FROM Test WHERE date = '" + inputDate + "'";
sumKG = 0;
foreach (var c in db.Query(getData))
{
var total = c.kg * c.rep * c.sett;
DateTime thisDay = c.date;
nextDay = thisDay.AddDays(1);
inputDate = nextDay.ToString("yyyy-MM-dd");
sumKG += total;
}
@sumKG <br />
}
因此,这会对数据库中每行存储相同的日期进行计算,当foreach循环完成计算时,它会跳回到for循环,inputDate
将在第二天进行,因为但是,如果有一个日期与数据库中的任何内容都不匹配,它什么都不做,我希望它再次添加一天到addDays(1)
,并且每次有一天再继续添加到inputDate
在for
循环完成之前不匹配!
因为在这种情况下for loop
的点是检查数据一个月的时间,当一天为零时,它只是停止,我该如何解决?它有意义吗?
答案 0 :(得分:1)
您已经知道要搜索的日期,因为您在foreach循环之外有它。因此,添加一天的逻辑应该在foreach循环之外完成。
{{1}}
这也更有效,因为您没有不必要地重置变量 - 但是它需要您使inputDate成为DateTime而不是字符串。
或者更好的是,为什么需要31个数据库查询?
不幸的是我没有这些工具可以为你提供SQL命令,但绝对可以编写一个命令来计算inputDate和inputDate之间行数范围的sumKG + 31天,然后返回结果格式为:Grouped Date | sumKG
如果您喜欢1个SQL命令返回31行总计的想法,那么您可能希望转到https://stackoverflow.com/questions/tagged/sql寻求帮助
答案 1 :(得分:0)
这个怎么样?
for (int i = 1; i < 31; i++)
{
var getData = "SELECT * FROM Test WHERE date = '" + inputDate.ToString("yyyy-MM-dd") + "'";
sumKG = 0;
nextDay = thisDay.AddDays(1);
inputDate = nextDay
foreach (var c in db.Query(getData))
{
var total = c.kg * c.rep * c.sett;
sumKG += total;
}
@sumKG <br />
}