簡體   English   中英

如何在 LINQ 的 where 條件下使用 EXISTS?

[英]How to use EXISTS in where condition of LINQ?

我經歷了幾個類似的問題,但找不到我想要的。

我需要在 Answers 表中找到具有 ID 的標簽,因為可能有多個包含標簽 ID 的答案記錄,我需要處理重復項。 這就是我不能執行簡單連接的原因。

我想過使用 EXISTS 但還沒有找到方法。

這是工作的 SQL

SELECT DISTINCT TagName
FROM Tags tag
JOIN Answers ans ON ans.StID = tag.Id  
WHERE tag.SchId = 472
 AND ans.isValid = 1

這是我在 LINQ 中嘗試但沒有成功的方法

(from tag in Tags
 where tag.Id.Any(from ans in Answers
                  where ans.StID == tag.Id
                  && tag.SchId == 472
                  && ans.isValid == true
                  select ans.ID)
select tag.TagName

如果有人可以提出一種在 LINQ 中正確實現此查詢的方法,那將會很有幫助。

您通常希望通過使用Enumerable.Any()方法傳入一個函數來完成此操作,該函數將檢查您的集合中的任何項目是否滿足給定條件:

var x = Tags.Where(t => t.SchId == 472 && Answers.Any(a => a.StId == tag.Id && a.isValid))
            .Select(t => t.TagName)
            .Distinct(); 

這應該為您提供一個SchId為 472 並且至少有一個有效答案的不同標簽的列表。

查看 Distinct 方法,它將消除您的重復項。 試試下面的代碼。

(from tag in Tags
where tag.Id.Any(from ans in Answers
                  where ans.StID == tag.Id
                  && tag.SchId == 472
                  && ans.isValid == true
                  select ans.ID).Distinct(ans => ans.ID)
select tag.TagName

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM