我经历了几个类似的问题,但无法找到我想要的东西。
我需要在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中正确实现此查询的方法,那将会很有帮助。
答案 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