gpt4 book ai didi

c# - Linq 中的计算字段按总和分组

转载 作者:行者123 更新时间:2023-11-29 14:32:34 25 4
gpt4 key购买 nike

我想为表之间的三向连接创建一个计算字段。这三个表分别命名为 Recipes、Ingredients 和 IngredientsToRecipes。这些表携带的值如下:

食谱

  • 配方ID
  • 用户ID
  • 姓名
  • 描述

成分

  • 姓名
  • 价格
  • 描述

成分到食谱

  • 配方ID

现在,我开始进行三向连接,然后按菜谱分组,因为连接中会有很多重复项,我是这样做的:

var recipesJoin = (
from a in db.IngredientsToRecipes
join b in db.Recipes on a.recipeID equals b.recipeID
join c in db.Ingredients on a.siin equals c.siin
select new
{
recipeID = a.recipeID,
userID = b.userID,
name = b.name,
description = b.description,
price = c.price
}).GroupBy(x=>x.recipeID);

然后我的计划是从 recipesJoin 创建一个新表,我将在其中对价格求和,然后只返回价格低于变量 y 的行。我已经尝试了很多东西,但我对 Linq 的理解是从今天开始的,所以我的理解非常有限。我试过了

var recipesJoin = (
from a in db.IngredientsToRecipes
join b in db.Recipes on a.recipeID equals b.recipeID
join c in db.Ingredients on a.siin equals c.siin
select new
{
recipeID = a.recipeID,
userID = b.userID,
name = b.name,
description = b.description,
price = c.price
}).GroupBy(x=>x.recipeID).Sum(y=>y.price);

但是我得到了错误:

Severity Code Description Project File Line Suppression State Error CS1061 'IGrouping>' does not contain a definition for 'price' and no extension method 'price' accepting a first argument of type 'IGrouping>' could be found (are you missing a using directive or an assembly reference?) SalWebAPI C:\Users\Samuel.endeva\source\repos\SalApp\SalApp\SalWebAPI\Controllers\RecipeTypeBudgetController.cs 31 Active

我不太明白这个错误。我的主要目标是求和并分组到一个计算字段中,删除高于特定价格的行,然后将新表与另一个表连接起来进行简单检查。我如何计算这样的 3 路连接的总和?

最佳答案

您应该选择分组操作后的结果。由于您按 recipeID 分组,我相信您需要每个唯一食谱 ID 的总价,因此这里是建议:

var recipesJoin = (
from a in db.IngredientsToRecipes
join b in db.Recipes on a.recipeID equals b.recipeID
join c in db.Ingredients on a.siin equals c.siin
select new
{
recipeID = a.recipeID,
userID = b.userID,
name = b.name,
description = b.description,
price = c.price
}).GroupBy(x => x.recipeID) // 1
.Select(grp=> new //2
{
recipeID = grp.Key,
name= grp.First().name, // same ID => same name anyway
toalPrice = grp.Sum(b => b.price) //3
})
.Where(y => y.totalPrice < 2000); //4

1- 按食谱 ID 分组

2- 选择结果以获得每个唯一配方 ID 的不同实体

3- 在这里您可以对每个唯一的 recipeID 求和(通过 y.Key==grouping key 获得)

4- 过滤结果(将 2000 替换为您的实际阈值)

关于c# - Linq 中的计算字段按总和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49452640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com