MVC 链接到 sql 分组依据和比较

本文关键字:比较 链接 sql MVC | 更新日期: 2023-09-27 18:31:32

感谢前面的一些帮助,让以下 linq to 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'的定义,并且找不到接受'IGrouping'类型的第一个参数的扩展方法'quantityAmount'(您是否缺少使用指令或程序集引用?

数量金额在没有 GroupBy 子句的情况下被接受,那么为什么它现在抱怨它呢?

这是我关机前一天的最后一张照片,所以很抱歉没有立即回复你。但感谢所有花时间提供帮助的人。

MVC 链接到 sql 分组依据和比较

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