0

我正在为 LLBL 使用 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 为我生成它。

4

1 回答 1

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);
于 2012-09-08T22:21:07.723 回答