【问题标题】:LLBL Linq variable number of joinsLLBL Linq 可变连接数
【发布时间】:2012-09-07 18:23:15
【问题描述】:

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

【问题讨论】:

    标签: linq llblgenpro


    【解决方案1】:

    我不具体了解 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);
    

    【讨论】:

    • 我转换回旧样式 llbl 并使其工作。您加入通话中的最后一项是我认为我没有尝试过的事情。太糟糕了,我现在无法对其进行测试,因为它看起来可能有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 2012-01-06
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多