如何在LINQ的条件下使用EXISTS?

时间:2017-01-18 20:03:07

标签: c# 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中正确实现此查询的方法,那将会很有帮助。

2 个答案:

答案 0 :(得分:1)

您通常希望通过使用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且至少有一个有效答案。

答案 1 :(得分:0)

查看将删除重复项的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