2017-01-19 6 views
1
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ループにジャンプして戻ります。 inputDateaddDays(1)のため翌日になりますが、データベースに何も一致しない日付がある場合は、inputDateにもう一度追加して、翌日にはいつでもいいです一致するまでforまでループ!Foreachループが結果を見つけるまで実行します。

この場合、for loopのポイントは1ヶ月間のデータをチェックすることで、1日がゼロの場合は停止します。これをどのように解決すればよいですか?何か意味がありましたか?

+1

なぜ代わりに計算するSQLを使用しての、それぞれの日のためにC#でこの計算を行いますそれはすべて最初の場所ですか?あなたのテーブル構造、いくつかのサンプルデータと望みの結果を追加するならば、それをすべて計算する単一のSQL文を作成するのに役立つでしょう。 –

+0

この種のロジックをビューモデルから分離しておく必要があります。コントローラですべての計算を行い、結果をビューモデルに表示します。 – Nikola

+0

@ZoharPeled私はその笑を考えなかったが、今はそれを修正した!私は実際にそのheheを行う方法を知っていた! –

答えて

1

foreachループの外にあるため、検索している日付はすでにわかっています。したがって、foreachループの外で1日追加するロジックを行う必要があります。

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

あなたが不必要に変数をリセットしていないので、これはまた、より効率的である - しかしそれはinputDateのDateTimeではなく、文字列を作るためにあなたを必要とします。

さらに、なぜ31のデータベースクエリが必要ですか?

残念ながら私はあなたにSQLコマンドを与えるツールを持っていませんが、inputDateとinputDate + 31日の間の行の範囲でsumKGを計算して戻すコマンドを書くことは間違いありませんグループ化された日付| sumKG

あなたは合計の31行を返す1つのSQLコマンドのアイデアが好きなら、あなたが助けをhttps://stackoverflow.com/questions/tagged/sqlに頭の上にしたいことがあり

+0

助けてくれてありがとう!私はそれを調べて、ただ1つのクエリにします!しかし、これも私の問題を解決しましたので、これは正解です! –

0

これはいかがですか?

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; 
    sumKG += total; 
    } 
    inputDate = inputDate.AddDays(1); 
    @sumKG <br /> 
} 
+0

この例は、Pontusの入力Dateがstring型であるため動作しません。私はあなたのアプローチを理解していますが、それは良い見えます... –

関連する問題