将复杂查询转换为不带EXISTS的linq

本文关键字:EXISTS linq 复杂 查询 转换 | 更新日期: 2023-09-27 17:57:29

大家好,有人能帮我把这个sql转换成linq吗?我认为我最大的问题来自于sql中不存在的语句到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)

感谢所有

将复杂查询转换为不带EXISTS的linq

您只需执行一个子查询并检查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();

"not exists"表达式后面跟一个"pmq"上的谓词。请参阅Enumerable.AnyEnumerable.All扩展方法—您可以使用其中任何一种。