Как перевести этот запрос в linq? - PullRequest
0 голосов
/ 06 мая 2020

У меня есть этот 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() имел параметр.

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Группа путем создания двухмерного списка: Список>. To Top - первый участник List. См. Код ниже

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 голосов
/ 06 мая 2020

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

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() };
...