Frage

Ich muss eine Datenbank haben, die mit einer Tabelle namens "Benutzer" beginnt, die sich selbst referenzieren muss und ein sehr tiefes Diagramm von verwandten Objekten hat. Es muss wie die linke Seite des Bildes unten sein (ignorieren Sie die rechte Seite).

enter image description here

Ich muss auch diese Grafik sowohl nach oben als auch nach unten durchqueren, um Prozentsätze, Gesamtsummen usw. zu berechnen. Mit anderen Worten, ich muss in einigen Fällen das gesamte Diagramm verfolgen.

Ist das möglich und/oder wie wird es getan? Kann das Durchqueren in der LINQ -Anweisung richtig durchgeführt werden? Beispiele?

BEARBEITEN:Ich versuche im Grunde genommen, ein Network -Marketing -Szenario zu erstellen und muss das Ergebnis der einzelnen Personen berechnen.

Beispiele:

  1. Um den Gesamtverkauf für jeden Benutzer unter einem bestimmten Benutzer zu kalulieren (so dass jeder Benutzer eine Art Einnahmen erzielt hat).
  2. Berechnen Sie die Kommission auf einer bestimmten Ebene des Baumes (z. B. wenn die Top -Person jeweils 3 Personen unter sich hatte, die jeweils ein Produkt für 1 USD verkauften, und die Provision betrug 50%, dann würde es 1,50 USD geben.)
  3. Wenn ich das Bild oben (links) für "B" befragt habe, sollte ich "B, H, I, J, N, O" bekommen.

Hoffentlich hilft das: s

War es hilfreich?

Lösung

Sie können den gesamten Baum nicht mit LINQ auf eine Weise durchqueren, die sich auf eine einzelne SQL -Abfrage (oder eine konstante Anzahl) übersetzt. Sie können es entweder mit einer Abfrage für jede Ebene oder mit einer Abfrage tun, die auf eine bestimmte Anzahl von Ebenen beschränkt ist (aber eine solche Abfrage würde mit vielen Ebenen wirklich groß werden).

In T-SQL (ich gehe davon aus, dass Sie MS SQL Server verwenden) können Sie dies verwenden rekursive gemeinsame Tabellenausdrücke. Es sollte möglich sein, dies in eine gespeicherte Prozedur zu versetzen, die Sie von Linq verwenden können, um die gewünschten Informationen zu erhalten.

Zusammenfassend sind Ihre Optionen:

  1. Verwenden Sie nicht linq, nur SQL mit rekursivem CTE
  2. Verwenden Sie rekursives CTE in einem gespeicherten Verfahren von linq
  3. Verwenden Sie LINQ und erstellen Sie eine Abfrage für jede Ebene
  4. Verwenden Sie eine hässliche Linq -Abfrage, die auf nur wenige Ebenen beschränkt ist

Andere Tipps

Ich weiß, dass dies zu spät ist, aber wenn Sie sich gerichtete Graph -Algorithmen ansehen, können Sie die rekursiven Probleme umgehen. Schauen Sie sich diese 2 Artikel an:

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

http://www.codeproject.com/articles/22824/a-model-to-repesent-cirected-acyclic-graphs-dag-o

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top