Question

Je dois avoir une base de données qui commence par une table appelée « utilisateur » qui doit se auto référence et un graphique très profond des objets connexes. Il devra être comme le côté gauche de l'image ci-dessous (ne pas tenir compte du côté droit).

entrer image description ici

Je vais aussi devoir traverser à travers ce graphique à la fois vers le haut et vers le bas pour les pourcentages, les totaux de calculate, etc. En d'autres termes, je vais devoir travese le graphique entier dans certains cas.

Est-ce possible et / ou comment est-il fait? Peut être fait droit traversant dans la déclaration de LINQ? Des exemples?

EDIT: Je suis fondamentalement d'essayer de créer un scénario de marketing de réseau et le besoin de calculer le bénéfice de chaque personne.

Exemples:

  1. Pour pouvoir calulate le total des ventes pour chaque utilisateur sous un utilisateur spécifique (afin que chaque utilisateur aurait une sorte de revenus venant).
  2. Calculer la commission à un certain niveau de l'arbre (par exemple si la personne supérieure avait 3 personnes ci-dessous les chacun vendent un produit pour 1 $ et la commission était de 50% alors il serait de 1,50 $.)
  3. Si j'interroge sur l'image ci-dessus (à gauche) pour "B" je devrais "B, H, I, J, N, O"

Si tout va bien qui aide: S

Était-ce utile?

La solution

Vous ne pouvez pas traverser tout l'arbre en utilisant seulement LINQ d'une manière qui se traduirait par simple requête SQL (ou un nombre constant d'entre eux). Vous pouvez le faire soit avec une requête pour chaque niveau ou avec une requête, qui se limite à un nombre spécifique de niveaux (mais une telle requête obtiendrait vraiment grand avec beaucoup de niveaux).

Dans T-SQL (je suppose que vous utilisez MS SQL Server), vous pouvez le faire en utilisant récursives expressions de table commune . Il devrait être possible de mettre cela dans une procédure stockée que vous pouvez utiliser à partir de LINQ pour obtenir les informations que vous voulez réellement.

Pour résumer, vos options sont:

  1. Ne pas utiliser LINQ, juste SQL avec CTE récursive
  2. Utiliser CTE récursive dans une procédure stockée de LINQ
  3. Utilisez LINQ, la création d'une requête pour chaque niveau
  4. Utiliser requête LINQ laide limitée à quelques niveaux

Autres conseils

Je sais que c'est en retard, mais si vous regardez les algorithmes Directed Graph, vous pouvez contourner les problèmes récurrents. consultez ces 2 articles:

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

http: // www.codeproject.com/Articles/22824/A-Model-to-Represent-Directed-Acyclic-Graphs-DAG-o

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top