【问题标题】:SQL query in linq to sql, group by troublelinq to sql中的SQL查询,按麻烦分组
【发布时间】:2018-06-10 20:50:23
【问题描述】:

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

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();
        }

有人可以帮我解决一下我的语法吗?

【问题讨论】:

  • 您是否通过示例查找分组并阅读文档?相信我,这很简单,您可以通过查找这些内容了解更多信息
  • 文档在哪里?
  • 来吧,这里有例子搜索功能,文档有谷歌。

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


【解决方案1】:

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

用于将 SQL 转换为 LINQ,

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多