【问题标题】:Where clause on childs navigation properties子导航属性的 Where 子句
【发布时间】:2018-10-24 14:28:22
【问题描述】:

我尝试根据多级子导航属性查询带有“where 子句”的表。

我有:

  • 表 A 带有导航属性:
    • 带有导航属性的表 B:
      • 表 C

所以我试试:

var query = context.TableA.where(a => a.TableB_navProperties.where(b => b.TbableC_navProperties.where(c => c.prop=="testCondition")));

但是这个查询不正确:visual studio 说: “无法将 system.collection.generic.IEnumerable 转换为 bool”

如何查询带有子导航属性子级条件的表?

谢谢

【问题讨论】:

  • 就像常规嵌套类一样:context.TableA.where(a => a.TableB_navProperties.TbableC_navProperties.prop=="testCondition")
  • 嗨,我要查询的导航属性是实体的集合,所以我不能执行 TableB_navProperties.TbableC_navProperties。有没有办法对集合 IEnumerable 进行嵌套查询?

标签: linq-to-entities navigation-properties


【解决方案1】:

我找到了解决方案。对于集合的导航属性,请使用 Any() 而不是 where () :

var query = context.TableA.where(a => a.TableB_navProperties.Any(b => b.TbableC_navProperties.Any(c => c.prop=="testCondition"))); 

此解决方案有效,但生成的 sql 使用了很多“Exist subquery”,所以我认为它不是很有效。

【讨论】:

  • 据我所知,EXIST 子查询在大多数情况下是最快的 SQL 选项。
猜你喜欢
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多