LLBL Linq可变连接数

时间:2012-09-07 18:23:15

标签: linq llblgenpro

我正在使用LLL的Linq语法。我需要多次加入特定的表。我有一个确实有效的查询,但我试图让它更快。我有原始的SQL,但我不确定如何在Linq中编码它,或者我是否可以。这是一个简化的例子:

SELECT Parent.SomeColumn
FROM
    ParentTable Parent
    INNER JOIN ChildTable Child1 ON Child1.ParentID = Parent.ID
    INNER JOIN ChildTable Child2 ON Child2.ParentID = Parent.ID
WHERE
    Child1.TypeColumn = 'Type1'
    AND Child2.TypeColumn = 'Type2'

这很容易做到,但我想要处理Child3,Child4等的东西。换句话说,我不知道编译时ChildTable连接的数量。

我的原始代码查询了ParentTable,然后每次需要连接时都在ChildTable上执行EXISTS子查询。它有效,但我所看到的是上面的查询将花费大约1/4的时间来执行。我有一些实时的UI更新,如果我可以做到这一点,将会看到显着的改进。

我知道如果我在代码中构建SQL查询会非常容易,但我真的很想依靠LLBL来为我生成。

1 个答案:

答案 0 :(得分:0)

我不是特别了解LLBL,但是在EF或LINQ to SQL中,如果以下内容没有产生与您发布的原始SQL查询非常相似的内容,我会非常惊讶:

int numJoins = ...
IQueryable<ParentTable> parents = ...

for (var i = 0; i < numJoins; i++) {
    var typeI = "Type" + (i + 1);
    var typeIChildren = children.Where(ch => ch.TypeColumn == typeI);
    parents = parents.Join(typeIchildren, parent => parent.Id, child => child.ParentId, (parent, child) => parent);
}

return parents.Select(p => p.SomeColumn);