在linq到SQL的SQL查询,麻烦分组

时间:2017-12-31 00:50:48

标签: c# asp.net sql-server linq

这里的想法是将所有配方中的所有成分加起来。这是我的查询

SELECT IngredientName,sum(Amount) as Amount,Unit 
FROM RecipeIngredients Join Ingredients ON RecipeIngredients.IngredientID = Ingredients.IngredientsID
GROUP BY IngredientID,IngredientName,Unit
ORDER BY IngredientName

效果很好。没有问题。我对linq to sql语法感到困惑。 这是我到目前为止所做的。

using (lDataContext db = new lDataContext())
        {
            return (from ri in db.RecipeIngredients join i in db.Ingredients on ri.IngredientID equals i.IngredientsID   

                   group new {ri,i} by new {i.IngredientsID,i.IngredientName,ri.Unit } 
                   into table
                   select new {
                      Name = table.IngredientName
                      Unit = table.Unit
                      Amount = table.Sum(i.amount) } 
                      ).ToList();
        }

请大家帮我解释一下我的语法?

1 个答案:

答案 0 :(得分:0)

假设您没有使用LINQ to Entities而只使用LINQ to SQL,

将SQL转换为LINQ,

  1. 将子选项转换为单独的变量
  2. 以LINQ子句顺序翻译每个子句,将monadic运算符(DISTINCT,TOP等)作为应用于整个LINQ查询的函数。
  3. 使用表别名作为范围变量。使用列别名作为匿名类型字段名称。
  4. 对多列使用匿名类型(new {})
  5. 使用连接变量模拟左连接,然后从连接变量开始,然后执行.DefaultIfEmpty()。
  6. 将COALESCE替换为条件运算符和空值测试。
  7. SELECT *必须替换为select range变量或者连接,一个包含所有范围变量的匿名对象。
  8. SELECT flds必须替换为select new {...},创建一个包含所有所需字段或表达式的匿名对象。