2014-10-15 4 views
0

Я имею ОЧЕНЬ трудное время преобразования мой простой SQL запрос в LINQ ...Преобразовать SUM/СЛУЧАЙ КОГДА/GROUP BY 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), 

      }); 

заранее спасибо

ответ

0

Вы не используете свои сгруппированных значения. Ваш запрос должен быть как:

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), 

     }); 

Я также хотел бы использовать другое имя переменного, чем group в проекции (Select), так как он является контекстными ключевыми словами (с выражением запроса)

+0

Должна ли '.GroupBy (.. .) 'be' .GroupBy (r => new {r.Id, r.Location}) '? – Maarten

+0

@Maarten, спасибо, что указали это – Habib

Смежные вопросы