LINQ to SQL其中集合包含集合

Oli*_*ver 6 c# sql-server-2008 linq-to-sql

我有一个问题:(我在两个表(1和2)之间有很多表,通过映射表(3):

(1)Trees / (2)Insects 

TreeID <- (3)TreeInsects -> InsectID   
Run Code Online (Sandbox Code Playgroud)

然后是一对多的关系:

Trees.ID -> Leaves.TreeID
Run Code Online (Sandbox Code Playgroud)

我想执行一个查询,它将为我提供昆虫收集的所有叶子(通过树木 - 昆虫映射表).

例如,我有List<Insects>并且我希望所有通过树 - 昆虫映射表与列表中的任何昆虫相关联的叶子.

这似乎是一个简单的任务,但由于某种原因,我在这方面遇到了麻烦!

我有最好的:但Single()使它不正确:

   from l in Leaves
            where (from i in Insects
                   select i.ID)
                  .Contains((from ti in l.Tree.TreeInsects
                             select ti.InsectID).Single())
            select l;
Run Code Online (Sandbox Code Playgroud)

Dmi*_*try 1

我不擅长类似 sql 的语法,所以我会用扩展来编写。

ctx.Leaves.Where(l => ctx.TreeInsects.Where( ti => list_with_insects.Select(lwi => lwi.InsectID).Contains( ti.InsectID ) ).Any( ti => ti.TreeID == l.TreeID ) );
Run Code Online (Sandbox Code Playgroud)