2016-08-22 3 views
1

Я пытаюсь преобразовать следующий запрос к выражению Linq:Уплотненный выбрать с группой с помощью LINQ

SELECT t1.lastchanged, 
    currentstatus, 
    (SELECT count(ID) 
    FROM [Issues] t2 
    WHERE t2.CurrentStatus = t1.currentstatus and t2.lastchanged <= t1.lastchanged) AS running_total 
FROM [Issues] t1 
GROUP BY t1.lastchanged, currentstatus 
ORDER BY t1.lastchanged 

До сих пор я сделал следующее:

var statusCounts = models.GroupBy(x => new { x.CurrentStatus, x.LastChanged }) 
         .Select(g => new { g.Key, Count = g.Count() }) 
         .ToList(); 

Любые предложения?

ответ

1

Чтобы иметь вложенный выбор, как и в вашем sql, выберите еще раз из коллекции model.

var statusCounts = models.GroupBy(x => new { x.CurrentStatus, x.LastChanged }) 
         .Select(g => new 
         { 
          CurrentStatus = g.Key.CurrentStatus, 
          LastChanged = g.Key.LastChanged, 
          Count = models.Count(m => m.CurrentStatus == g.Key.CurrentStatus && 
                 m.LastChanged <= g.Key.LastChanged) 
         }) 
         .OrderBy(item => item.Key.LastChanged); 

Или в синтаксисе запроса:

var statusCounts = from t1 in models 
        group t1 by new { x.CurrentStatus, x.LastChanged } into g 
        orderby g.Key.LastChanged 
        select new 
        { 
         CurrentStatus = g.Key.CurrentStatus, 
         LastChanged = g.Key.LastChanged, 
         Count = models.Count(m => m.CurrentStatus == g.Key.CurrentStatus && 
               m.LastChanged <= g.Key.LastChanged) 
        }; 
+1

Отлично! Это то, что мне нужно. Спасибо – Hanady

+0

@Hanady - Тебе очень рады :) –

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