[英]How can I get a nested IN clause with a linq2sql query?
我正在尝试在我们的应用程序中实现一些搜索功能,并且遇到这样的情况:用户可以从列表中选择多个主题,而我们希望返回与至少一个所选主题匹配的所有活动。 每个活动可以有0到多个主题。
我可以编写一个直接的SQL查询,使我得到想要的结果,如下所示:
SELECT *
FROM dbo.ACTIVITY_VERSION av
WHERE ACTIVITY_VERSION_ID IN (
SELECT ACTIVITY_VERSION_ID
FROM dbo.ACTIVITY_TOPIC at
WHERE at.TOPIC_ID IN (3,4)
)
我不知道的是如何编写一个返回相同结果的LINQ查询(我们正在使用Linq to Sql)。
我试过了:
activities.Where(x => criteria.TopicIds.Intersect(x.TopicIds).Any());
如果活动是内存中对象的列表(即Linq to Objects查询),则此方法有效,但是如果我尝试在访问数据库的查询中使用相同的代码,则会收到错误消息。 我收到的错误是:
Local sequence cannot be used in LINQ to SQL implementations of query operators except the Contains operator.
我相信这意味着Linq to Sql不知道如何翻译Intersect或Any(或可能两者)。 如果是这样,我知道为什么它不起作用,但是我仍然不知道如何使其按自己的意愿去做,而我的Google-fu并没有为我提供任何可行的方法。
尚未测试。 但是,这就是您要做的事情。
List<int> IDs = new List<int>();
IDs.Add(3);
IDs.Add(4);
var ACTIVITY_VERSION_IDs = ACTIVITY_TOPIC
.Where(AT => IDs.Contains(AT.TOPIC_ID))
.Select(AT=>AT.ACTIVITY_VERSION_ID)
var results = ACTIVITY_VERSION
.Where(AV => ACTIVITY_VERSION_IDs.Contains(AV.ACTIVITY_VERSION_ID))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.