2017-01-19 35 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循環和由於addDays(1)inputDate將是第二天,但是,如果有一個日期與數據庫中的任何內容不匹配,它什麼也不做,我希望它再次增加一天到inputDate,並且每次沒有時間繼續到第二天匹配,直到for循環完成!做的foreach循環運行,直到它找到導致

因爲在這種情況下for loop的要點是檢查數據一個月的時間,而當一天爲零時,它只是停止,我該如何解決這個問題?它有意義嗎?

+1

爲什麼要做這個計算在C#中的每一天,而不是使用SQL來計算這一切都擺在首位?如果你要添加你的表結構,一些示例數據和所需的結果,我們可以幫助你創建一個單獨的sql語句來計算它。 –

+0

您應該嘗試將這種邏輯與視圖模型分開。在控制器中進行所有計算,並將結果呈現在視圖模型中。 – Nikola

+0

@ZoharPeled我沒有想到那個哈哈,但我現在修復了!我其實知道該怎麼做那嘿嘿! –

回答

1

您已經知道您正在搜索的日期,因爲您在foreach循環之外。因此添加一天的邏輯應該在foreach循環之外完成。

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

如果你喜歡1個SQL命令返回31行總計的想法,那麼你可能要頭以上https://stackoverflow.com/questions/tagged/sql求助

+0

感謝您的幫助!我會着眼於此,只有一個查詢!但這也解決了我現在的問題,所以這是正確的答案! –

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的輸入日期是字符串類型。雖然我理解你的方法,那看起來不錯... –