質問

「ユーザー」と呼ばれるテーブルから始まるデータベースが必要で、それ自体を参照する必要があり、関連するオブジェクトの非常に深いグラフがあります。下の画像の左側のようにする必要があります(右側を無視します)。

enter image description here

また、パーセンテージ、合計などを計算するために、このグラフを上下に通過する必要があります。つまり、場合によってはグラフ全体を追跡する必要があります。

これは可能ですか、そして/またはそれはどのように行われますか? linqステートメントでトラバースを正しく行うことはできますか?例?

編集:私は基本的にネットワークマーケティングシナリオを作成しようとしており、各人の収益を計算する必要があります。

例:

  1. 特定のユーザーの下で各ユーザーの総売上を検討できるようにするために(各ユーザーが何らかの収益を得ることができます)。
  2. 委員会を一定レベルのツリーで計算します(たとえば、トップの人がそれぞれ1ドルで3人の人々が1ドルで販売されていた場合、委員会は50%でした。
  3. 上記の画像(左側)を「b」に照会した場合、「b、h、i、j、n、o」を取得する必要があります。

うまくいけば、それが役立つ:s

役に立ちましたか?

解決

単一のSQLクエリ(またはそれらの一定のカウント)に変換される方法で、Linqだけを使用してツリー全体を通過することはできません。各レベルの1つのクエリまたは1つのクエリでそれを行うことができます。これは、特定のレベルのカウントに限定されます(ただし、このようなクエリは多くのレベルで非常に大きくなります)。

T-SQL(MS SQL Serverを使用していると思います)では、これを使用することができます 再帰的な一般的なテーブル式. 。それをLINQから使用して実際に必要な情報を取得できるストアドプロシージャに入れることができるはずです。

要約すると、オプションは次のとおりです。

  1. LINQを使用しないでください。再帰CTEを備えたSQLだけです
  2. LINQからのストアドプロシージャで再帰CTEを使用します
  3. LINQを使用して、各レベルに1つのクエリを作成します
  4. わずか数レベルに制限されている醜いlinqクエリを使用してください

他のヒント

これは遅れていることは知っていますが、指示されたグラフアルゴリズムを見ると、再帰的な問題をバイパスできます。これら2つの記事をチェックしてください:

http://www.sitepoint.com/hierarchical-data-database/

http://www.codeproject.com/articles/22824/a-model-to-represent-directed-asclic-graphs-dag-o

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top