2013-02-04 48 views
0

大家好任何人可以幫我這個SQL我thnink我最大的問題來自於SQL中不存在語句LINQ複雜的查詢轉換爲LINQ沒有EXISTS

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) 

轉換爲LINQ謝謝大家

回答

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

考慮用等效的'!myEnumerable.Any(...)'替換'myEnumerable.Count(...)== 0'。 –

+0

啊,很好的電話 - 你是一個真正的生活resharper :) – eouw0o83hf

+0

謝謝你的幫助! –

1

「不存在」表達式後跟「pmq」謂詞。請參閱Enumerable.AnyEnumerable.All擴展方法 - 您可以使用。