假设我有两个实体:Ent
和SubEnt
,它们具有N:1的关系。因此,有导航属性SubEnt.Ents
和Ent.SubEnt
。此外,我还定义了一些ObjectQuery:
ObjectQuery<SubEnt> se;
我如何创建ESQL查询,从Ent
中选择所有从se
中有Ent.SubEnt
的实体?像这样:
SELECT VALUE it FROM Ent WHERE Ent.SubEnt IN @p
其中@p == se。它看起来像一个嵌套查询。但是这种语法是不正确的,因为"只支持标量类型"。
一旦有了ObjectQuery,就不能将其传递回ESQL。因此,您必须要么在ESQL中编写整个查询,而不使用分隔se
,要么必须使用ObjectQuery本身。在以后的情况下,尝试这样做:
var query = from e in context.Ents
join s in se on e.Ent.Id equals s.Id
select e;
除非你的例子只是一些更大的查询的简化,你也可以简单地尝试:
var query = se.SelectMany(s => s.Ents).Distinct();