我希望有人从这个问题中抓住了这个想法,但我不知道如何更好地总结它。
问题是我尝试在应用程序中进行简单搜索。我在StackOverflow中有问题和标签实体 - 在多对多关系中。
我将一组标记ID传递给我的过滤方法。它应该返回所有具有此标记的Question实体(带有此ID)。我是这样做的:
int[] tagIds = { 1, 2, 3};
var questions = myEntities.Questions
.ToList()
.Where(q => tagIds.Intersect(q.Tags.Select(t => t.Id).ToArray()).Any())
.ToList();
一切正常,但现在我添加了更多过滤器,更多方法使用此过滤器,所以我想得到一个DbQuery对象,而不是List。
我尝试删除.ToList()表达式,以获得适当的结果:
int[] tagIds = { 1, 2, 3};
var questions = myEntities.Questions
.Where(q => tagIds.Intersect(q.Tags.Select(t => t.Id).ToArray()).Any());
不幸的是,我得到一个例外,说明LINQ无法识别.ToArray()方法。谁能让我更好地了解如何实现这一目标?
答案 0 :(得分:1)
中甚至不需要ToArray()方法
.Where(q => tagIds.Intersect(q.Tags.Select(t => t.Id).ToArray())
因为Intersect只需要一个IEnumerable,Select已经返回,不一定是数组。