【问题标题】:How can I check whether an item of an Entity's child collection exists in another collection with LINQ to Entities?如何使用 LINQ to Entities 检查实体子集合的项目是否存在于另一个集合中?
【发布时间】:2014-08-08 18:29:58
【问题描述】:

我希望有人从这个问题中抓住了这个想法,但我不知道如何更好地总结它。

问题是我尝试在应用程序中进行简单搜索。我有 Question 和 Tag 实体,例如 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 对象,而不是 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() 方法。谁能给我一个更好的想法如何实现这一目标?

【问题讨论】:

  • 我认为你不需要在那里使用 toArray
  • 是的!谢谢你,你是对的。您可以将此作为答案发布,以便我将其标记为最佳。再次感谢!

标签: c# linq entity-framework linq-to-entities intersect


【解决方案1】:

甚至不需要 ToArray() 方法

.Where(q => tagIds.Intersect(q.Tags.Select(t => t.Id).ToArray())

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-05
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2013-12-21
    • 1970-01-01
    • 2021-10-31
    相关资源
    最近更新 更多