你好每个人都可以请任何人帮助我将这个sql转换为linq我知道我最大的问题来自sql中的not exists语句到linq
select count(distinct(GroupID)) from ParticipantModulequestionnaire pmq
inner join ParticipantGroupMember pgm on pmq.participantid = pgm.ParticipantID
where pmq.moduleid = 46 and not exists
(select unf.participantid from ParticipantModuleQuestionnaire unf where unf.ParticipantID = pmq.ParticipantID
and unf.ModuleID = 46
and isnull(unf.completedflag,0) <> 0)
谢谢大家
答案 0 :(得分:2)
您可以执行子查询并检查Any()
是否为false。我认为应该这样做(必须进行一些小的调整才能适应你的情况)。
var query =
from p in ParticipantModulequestionnaire
join g in ParticipantGroupMember on p.ParticipantId = g.PariticipamtnId
where p.ModuleId == 46
&& !ParticipantModuleQuestionnaire.Any(a =>
a.ParticipantId = p.ParticipantId
&& a.ModuleId == 46
&& (a.CompletedFlag ?? 0) != 0)
select [p or g, I don't know which].GroupId;
var result = query.Distinct().Count();
答案 1 :(得分:1)
“not exists”表达式后跟“pmq”的谓词。请参阅Enumerable.Any
和Enumerable.All
扩展方法 - 您可以使用。