使Foreach循环运行直到它找到结果

时间:2017-01-19 08:10:53

标签: c# razor foreach

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),并且每次有一天再继续添加到inputDatefor循环完成之前不匹配!

因为在这种情况下for loop的点是检查数据一个月的时间,当一天为零时,它只是停止,我该如何解决?它有意义吗?

2 个答案:

答案 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 />
}