-1

私は次のテーブル形式を持っています

Id (int)
ParentId (int)

ParentId = Idであるが、複数回ネストされているように、相互に関連するすべての行をクエリする必要があります

私はこれに取り組む方法に少しこだわっています、私はストアドプロシージャに戻るかもしれませんが、私は本当にこれを純粋なlinqtosqlで試してみたかったのです。

4

1 に答える 1

3

2つの選択肢があると思います。

  • 親を明示的にフェッチする必要があるため、dbへの個別の呼び出しが多数発生します。この種のアーキテクチャ(dbからの1回の呼び出しで自己参照データを再帰的にフェッチする)は、L2SまたはL2Eではサポートされていないと思います。

  • これらのシナリオでは、データベースのネイティブ機能(この場合はCTE )を使用する傾向があります。カスタムSQLクエリを使用し、。を使用して戻りタイプを定義することもできますdb.ExecuteQuery<ReturnType>。SQL Server 2005以降を使用している場合は、次の構文を使用できます。

    var allGroups =
    db.ExecuteQuery(
    @"WITH n(Id, ParentId) AS
    (SELECT Id, ParentId
    FROM MyTable
    WHERE Id = {0}
    UNION ALL
    SELECT nplus1.Id, nplus1.ParentId
    FROM MyTable as nplus1, n
    WHERE n.ParentId = nplus1.Id)
    SELECT Id, ParentId FROM n",
    firstChildId).ToList();

このようにして、1回の呼び出しですべてのエンティティをフェッチしました。SQLServerで上位再帰的な自己結合を行う方法を確認してください。SQL Serverで再帰的な自己結合を行う最も簡単な方法は?

于 2013-01-24T12:06:12.633 に答える