Linq多级内连接

时间:2016-04-12 07:06:12

标签: c# linq

我有3个不同的实体:

E1, E2, E3

E1的属性是E2的ObservableCollection。 E2的属性是E3的ObservableCollection。

使用linq查询,我希望得到所有基于E1的E3作为起点。

我尝试过类似的东西:

Query = Query.Where<E3>(i => E1.E2List.Select(ep => ep.E3List.Select(ai => ai.id))
             .Contains(i.id));

基本上意味着:将所有E3放在其中的ID位于E1的E2列表中的E3列表中

但正如你猜测的那样,这不起作用。

My starting point is this :
//make the array 
E3[] array;
//get all E3 datas
IQueryable<E3> Query = DBSetE3.AsQueryable();

我必须在我的数组中获得所有结果

所以我的结果应该是:进入数组,所有链接到E2的E3对象都包含在E1中,基于E1。

例如:

Entity 1| List of E2
E1 | E2A, E2B

Entity 2 | List of E3
E2B | E3C, E3D
E2A | E3E, E3F

当我搜索与E1相关的E3时,我必须得到E3C,E3D,E3E,E3F

1 个答案:

答案 0 :(得分:4)

您可以这样做:

SelectMany

基本上,您根据输入过滤所有E1。然后,您希望[[1,2],[3,4]](将结果[1,2,3,4]展平为SelectMany)以获取E2。然后你{{1}}它是E3s。