如何使用LINQ to Entities检查entity的子集合中的项是否存在于另一个集合中?

本文关键字:是否 存在 集合 另一个 子集合 LINQ 何使用 to Entities entity 检查 | 更新日期: 2023-09-27 18:17:00

我希望有人能从这个问题中理解我的意思,但我不知道如何更好地总结。

问题是我试图在应用程序中进行简单的搜索。我有问题和标签实体,像这些在StackOverflow -在一个多对多的关系。

我将一个标记id数组传递给我的过滤方法。它应该返回具有此标记(带有此id)的所有Question实体。我是这样做的:

int[] tagIds = { 1, 2, 3};
var questions = myEntities.Questions
                    .ToList()
                    .Where(q => tagIds.Intersect(q.Tags.Select(t => t.Id).ToArray()).Any())
                    .ToList();

一切工作正常,但现在我添加了更多的过滤器和更多的方法使用这个过滤器,所以我想要得到一个DbQuery对象,而不是一个列表。

我尝试删除。tolist()表达式,以获得适当的结果:

int[] tagIds = { 1, 2, 3};
var questions = myEntities.Questions
                    .Where(q => tagIds.Intersect(q.Tags.Select(t => t.Id).ToArray()).Any());

不幸的是,我得到一个异常,说明LINQ不识别. toarray()方法。谁能给我一个更好的主意如何实现这一点?

如何使用LINQ to Entities检查entity的子集合中的项是否存在于另一个集合中?

中甚至不需要ToArray()方法
.Where(q => tagIds.Intersect(q.Tags.Select(t => t.Id).ToArray())

因为Intersect只需要一个Select已经返回的IEnumerable,而不一定是数组。