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 に答える