代码之家  ›  专栏  ›  技术社区  ›  Zachary Scott

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

  •  3
  • Zachary Scott  · 技术社区  · 14 年前

    顶部的BigQuery获取一组产品和嵌套的相关表。然后,我在一个规范模式的错误尝试中应用了过滤。这是筛选代码。查询中有三个表,我想根据嵌套在底部查询中的值筛选顶部查询。就像我说的,这会产生我们想要的结果。

    但是,.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;
    

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

    1 回复  |  直到 14 年前
        1
  •  5
  •   leppie    14 年前
    from p in bigQuery
    where p.LPP.SelectMany(pv => pv.LVP).Any(x => x.colorid == intValue)
    select p;
    

    据我所见,以上应该是等价的。请尝试并检查生成的SQL(如果有效)。不管怎样,应该不会太远。