У меня есть этот запрос SQL

SELECT TOP 1 
    DOCID, ACTOR_ID, ACTOR_ROLE, ACTION_ID 
FROM
    ex_DOCAction 
WHERE
    DOCID = 126251
GROUP BY
    DOCID, ACTOR_ROLE, ACTION_ID, ACTOR_ID
HAVING
    COUNT(ACTION_ID) = 1

Я придумал это:

from x in _db.ex_DOCAction.Where(a => a.DOCID == request.DocId)
group x by new { x.DOCID, x.ACTOR_ROLE, x.ACTION_ID, x.ACTOR_ID } into grouped
where 

И я не знаю, как перевести

 HAVING COUNT(ACTION_ID) = 1

Здесь много похожих вопросов, но я не нашел ни одного вопроса, где бы count() имел параметр.

0
Jamil 6 Май 2020 в 10:55

2 ответа

Я полагаю, вы не можете перевести эту группу путем + проверки уникальности непосредственно в SQL. Вы можете вернуть структуру, в которой вы вычисляете количество уникальных Action_Id с

from x in _db.ex_DOCAction.Where(a => a.DOCID == request.DocId)
  group x by new { x.DOCID, x.ACTOR_ROLE, x.ACTION_ID, x.ACTOR_ID }
    into grouped
  select new {Key = grouped.Key, Count = (from y in grouped select y.ACTION_ID).Distinct().Count() };
0
Peter Csala 6 Май 2020 в 09:45

Группировать путем создания двумерного списка: Список>. Наверх является первым членом списка. Смотрите код ниже

var results = _db.ex_DOCAction
   .Where(a => (a.DOCID == request.DocId) && (a.ACTION_ID != null))
   .GroupBy(x => new { x.DOCID, x.ACTOR_ROLE, x.ACTION_ID, x.ACTOR_ID })
   .Select(x => x.First())
   .ToList();
0
jdweng 6 Май 2020 в 09:48