2015-11-25 3 views
5

Итак, я пытался повторить этот SQL запрос:Linq запрос с использованием группы по и с

select COUNT(*) as Total_2_Review 
from (
    select processed_image_id, count(*) as Total_Confirm from dbo.history 
    where action_id=104 
    group by processed_image_id 
    having count(*) > 1 
) as tbl 

с Linq следующим образом:

var total2Review = (from h in secondDb.Histories.Where(i => i.ActionId == 104) 
        group h by new { h.ActionId, h.ProcessedImageId } into g 
        where g.Key.ActionId > 1 
        select g).Count(); 

Однако, я знаю, что это не должно быть правильно, потому что я не выбираю фактическое количество больше 1 в моей группе.

Как я могу выполнить этот SQL-запрос в виде запроса LINQ?

+0

Почему вы группирование по 'ActionId' в Linq, когда вы не в SQL? – juharr

ответ

6

Изменение Key.ActionId для .Count() в where после group by:

var total2Review = (from h in secondDb.Histories.Where(i => i.ActionId == 104) 
        group h by new { h.ActionId, h.ProcessedImageId } into g 
        where g.Count()> 1 
        select g).Count(); 
+0

О, мужчина! Я был так близок! Спасибо. Я соглашусь через минуту –

+0

Добро пожаловать;) – octavioccl

7

LINQ не делает никакой разницы между Where и Having. Соответствующий SQL-запрос будет сгенерирован на основе вашего размещения предложения Where.

Вот как я бы перевести SQL запрос LINQ:

var total2Review = secondDb.Histories 
    .Where(i => i.ActionId == 104) // This "Where" remains a "where" 
    .GroupBy(i => i.ProcessedImageId) 
    .Where(g => g.Count() > 1)  // This "Where" becomes "having" 
    .Count();      // This gets the overall count 
+0

Спасибо за объяснение –

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