我如何改进作为规范的7行Linq查询?

Zac*_*ott 3 linq-to-entities where-clause

顶部的BigQuery获取一组Products和嵌套的相关表.然后,我在规范模式的不良尝试中应用过滤.这是过滤器代码.查询中有三个表,我想通过嵌套在底部查询中的值来过滤顶部查询.就像我说的,这目前产生了我们想要的结果.

但是,.Contains()为每个产生一个SQL WHERE EXISTS()子句.我们真的只需要一个,但我不知道如何获取内部ID与外部ID进行比较.

from p in bigQuery                            // Root table
where ( from pp in p.LPP                      // Level 1 nested table
        where (from pv in pp.LPV              // Level 2 nested table 
               where pv.colorid == intValue   // Our filter value
               select p.id).Contains(p.id)    // Where exists
        select p.id).Contains(p.id)           // Where exists
select p;
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?这样就生成了一个900行的SQL语句,到目前为止我们只有一个过滤器.

lep*_*pie 5

from p in bigQuery
where p.LPP.SelectMany(pv => pv.LVP).Any(x => x.colorid == intValue)
select p;
Run Code Online (Sandbox Code Playgroud)

从我所看到的,上述内容应该是等同的.如果有效,请尝试并检查生成的SQL.无论如何,它应该不远.