Pregunta

Necesito tener una base de datos que comience con una tabla llamada "Usuario" que deba referencia a sí misma y tendrá un gráfico muy profundo de objetos relacionados. Deberá ser como el lado izquierdo de la imagen a continuación (ignore el lado derecho).

enter image description here

También necesitaré atravesar este gráfico tanto hacia arriba como hacia abajo para calcular porcentajes, totales, etc. En otras palabras, necesitaré trasladar todo el gráfico en algunos casos.

¿Es esto posible y/o cómo se hace? ¿Se puede hacer un recorrido correctamente en la declaración LINQ? ¿Ejemplos?

EDITAR:Básicamente, estoy tratando de crear un escenario de marketing en red y necesito calcular las ganancias de cada persona.

Ejemplos:

  1. Poder calular las ventas totales para cada usuario bajo un usuario específico (por lo que cada usuario tendría algún tipo de ingresos).
  2. Calcule la comisión en un cierto nivel del árbol (por ejemplo, si la persona superior tuviera a 3 personas por debajo de ellas, cada una vendía un producto por $ 1 y la comisión era del 50%, entonces habría $ 1.50).
  3. Si consulté la imagen de arriba (a la izquierda) para "B", debería obtener "B, H, I, J, N, O"

Ojalá eso ayude: S

¿Fue útil?

Solución

No puede atravesar todo el árbol usando solo Linq de una manera que se traduciría en una sola consulta SQL (o un recuento constante de ellos). Puede hacerlo con una consulta para cada nivel o con una consulta, que se limita a un recuento específico de niveles (pero tal consulta se volvería realmente grande con muchos niveles).

En T-SQL (supongo que está utilizando MS SQL Server), puede hacerlo usando expresiones de tabla comunes recursivas. Debería ser posible ponerlo en un procedimiento almacenado que pueda usar de LINQ para obtener la información que realmente desea.

Para resumir, sus opciones son:

  1. No use Linq, solo SQL con CTE recursivo
  2. Use CTE recursivo en un procedimiento almacenado de Linq
  3. Use Linq, creando una consulta para cada nivel
  4. Use la consulta de Linq Ugly Limited a solo unos pocos niveles

Otros consejos

Sé que esto es tarde, pero si observa los algoritmos gráficos dirigidos, puede evitar los problemas recursivos. Echa un vistazo a estos 2 artículos:

http://www.sitePoint.com/hierchical-database/

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top