C# 通过SQL查询将SUM/CASE WHEN/GROUP转换为LINQ

C# 通过SQL查询将SUM/CASE WHEN/GROUP转换为LINQ,c#,sql,linq,C#,Sql,Linq,我很难将我的简单SQL查询转换为LINQ SELECT Id ,Location ,SUM( CASE WHEN TransactionType = 'Out' THEN [Quantity] * -1 ELSE Quantity END) AS StockQuantity FROM Transactions WHERE Id = 123 GROUP BY Id, Location 这是我最好的错误尝试 var resu

我很难将我的简单SQL查询转换为LINQ

SELECT Id
  ,Location
  ,SUM( CASE 
        WHEN TransactionType = 'Out' THEN [Quantity] * -1
        ELSE Quantity
        END) AS StockQuantity
FROM Transactions
WHERE Id = 123
GROUP BY Id, Location
这是我最好的错误尝试

        var result = db.Transactions
            .Where(r => r.Id == 123)
            .GroupBy(r => r.Id, r => r.Location)
            .Select(group => new
            {
                Id = r.Id,
                Location = r.Location,
                Quantity = sum(r.TransactionType == 2 ? r.Quantity * -1 : r.Quantity),

            });

提前感谢

您没有使用分组值。您的查询应该如下所示:

var result = db.Transactions
         .Where(r => r.Id == 123)
         .GroupBy(r => new { r.Id, r.Location} )
         .Select(grp => new
         {
             Id = grp.Key.Id,
             Location = grp.Key.Location,
             Quantity = grp.Sum(t=> t.TransactionType == 2 ? t.Quantity * -1 : t.Quantity),

         });
在投影(Select)中,我也会使用与
group
不同的变量名,因为它是一个上下文关键字(带有查询表达式)

如果
.GroupBy(…)
.GroupBy(r=>new{r.Id,r.Location})