感谢前面的一些帮助,得到以下linq到sql工作:
decimal? foodCount =
dbContext.fad_userFoods
.Where(uf => uf.dateAdded == thisDate && uf.userID == thisGuid)
.Select(uf => uf.quantityAmount)
.DefaultIfEmpty().Sum();
然后我会检查foodCount是否超过一定数量并相应地格式化输出。
但我意识到这有点过分了。用户可以在一天内多次输入相同的食物,例如早餐吃苹果,然后是下午点心的苹果。
谷歌搜索我遇到了包括GroupBy。在这种情况下GroupBy foodid。但我无法让它发挥作用。 (我来自webforms背景,我设置了一个存储过程来执行此操作,因此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'的定义,并且没有扩展方法'quantityAmount'接受第一个'IGrouping'类型的参数'(你错过了使用指令或程序集引用吗?)
在没有GroupBy子句的情况下接受了quantityAmount,那为什么现在就抱怨呢?
这是我关闭前一天的最后一次拍摄,因为没有立即回复你而道歉。但感谢所有花时间提供帮助的人。
答案 0 :(得分: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