我正在尝试在我们的应用程序中实现一些搜索功能,并且有一种情况,用户可以从列表中选择多个主题,我们希望返回与至少一个选定主题匹配的所有活动。每个 Activity 可以有 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 没有为我提供任何有用的东西。