2016-01-22 19 views
-1

由於比較一些幫助,得到了下面的LINQ to SQL工作:MVC連接到SQL GROUP BY和更早的

decimal? foodCount = 
    dbContext.fad_userFoods 
    .Where(uf => uf.dateAdded == thisDate && uf.userID == thisGuid) 
    .Select(uf => uf.quantityAmount) 
    .DefaultIfEmpty().Sum(); 

然後,我會檢查,看看是否foodCount超過一定數量和格式化輸出因此。

但我意識到這有點簡單。用戶可以在一天中多次輸入相同的食物,例如,一個蘋果吃早餐,然後一個蘋果吃下午點心。

Googling it我遇到過包括GroupBy。在這種情況下GroupBy foodid。但是我無法使其正常工作。 (我來自一個web表單的背景,我想建立一個存儲過程來這樣做,所以MVC和LINQ to SQL是新的我!)

所以我的表達,現在讀這樣的:

decimal? foodCount = 
    dbContext.fad_userFoods 
    .Where(uf => uf.dateAdded == thisDate && uf.userID == thisGuid) 
    .GroupBy(uf=>uf.foodID).Select(uf => uf.quantityAmount) 
    .DefaultIfEmpty().Sum(); 

但我收到一封Visual Studio消息,告訴我「'IGrouping'不包含'quantityAmount'的定義,並且沒有可以找到接受類型'IGrouping'的第一個參數的擴展方法'quantityAmount'(您是否缺少使用指令或裝配參考?)

quantityAmount在沒有GroupBy條款的情況下被接受,那麼爲什麼現在就抱怨它?

這是我最後一次拍攝的那一天,因爲我沒有馬上回復你而道歉。但是要感謝所有花時間幫助的人。

+0

你能否解釋一下是什麼問題的原始查詢,你想用第二個來實現什麼? –

+1

你有沒有試過類似的東西? http://stackoverflow.com/questions/33362478/ef-groupby-does-not-contain-a-definition-for-brieftitle-and-no-extension-meth –

+2

這是抱怨,因爲你的記錄現在在組。如果你想到一個rolodex,那麼你對每個第一個字母有「組」的地方,你不能要求例如在標籤「A」中的人的電話號碼是什麼。標籤「A」沒有人,它有一組人。你需要哪一個電話號碼。希望有所幫助。我強烈建議你看看一個免費(ish)程序[LINQPad](https://www.linqpad.net/),它可以幫助你可視化你在查詢時得到的結果。 –

回答

2

GroupBy返回鍵的映射對象和與這些鍵匹配的值列表。你沒有真正解釋你的確切需求,但是從你正在尋找的回報價值來看,我不認爲GroupBy真的對你有幫助,因爲你仍然在尋找一天中所有食物總量的總和。無論食物類型是否變化,原始陳述仍然是真實的。

如果你這樣做:

dbContext.fad_userFoods 
    .Where(uf => uf.dateAdded == thisDate && uf.userID == thisGuid) 
    .GroupBy(uf => uf.foodID, uf => uf.quantityAmount) 
    .ToDictionary(g => g.Key, g => g.Sum()) 

然後你就可以得到這些結果(請注意,foodId實際上可能是一個數字,而不是名稱):

FoodId Count 
Apple  3 
Orange 12 
Sandwich 2 
+0

這使我確切地知道我需要什麼。任何人在任何一天的食物項目總和。感謝您的幫助,並感謝其他花時間回覆的人。 – stumcc