Domanda

Ho bisogno di avere un database che inizia con una tabella denominata "Utente" che ha bisogno di sé stesso riferimento e avrà un profondo grafico di oggetti correlati. Essa dovrà essere come il lato sinistro l'immagine qui sotto (ignorare il lato destro).

entrare descrizione dell'immagine qui

Ho anche bisogno di traversata attraverso questo grafico sia alto e verso il basso, al fine di calcolare, percentuali totali, ecc In altre parole avrò bisogno di travese l'intero grafico in alcuni casi.

Questo è possibile e / o come si fa? Può traslazione essere fatto a destra nella dichiarazione LINQ? Esempi?

Modifica Sto fondamentalmente cercando di creare uno scenario di rete di marketing e di necessità di calcolare ogni persona guadagni.

Esempi:

  1. Per poter Calulate le vendite totali per ogni utente con un utente specifico (in modo che ogni utente dovrebbe avere una sorta di entrate provenienti).
  2. Calcolare la commissione ad un certo livello della struttura (ad esempio, se la persona in alto aveva 3 persone sotto di loro ogni vendita di un prodotto per $ 1 e la commissione è stata del 50%, allora non ci sarebbe $ 1,50.)
  3. Se ho chiesto che vedi nell'immagine (a sinistra) per "B" dovrei ottenere "B, H, I, J, N, O"

Si spera che aiuta: S

È stato utile?

Soluzione

Non si può attraversare l'intero albero utilizzando solo LINQ in un modo che si tradurrebbe in query SQL singolo (o un numero costante di loro). È possibile farlo sia con una query per ogni livello o con una query, che si limita ad un conteggio preciso dei livelli (ma una query otterrebbe davvero grande con molti livelli).

In T-SQL (presumo si sta utilizzando MS SQL Server), è possibile farlo utilizzando ricorsive espressioni di tabella comuni . Dovrebbe essere possibile mettere che in una stored procedure che è possibile utilizzare da LINQ per ottenere le informazioni che desidera veramente.

In sintesi, le opzioni sono:

  1. Non usare LINQ, solo SQL con CTE ricorsiva
  2. Usa CTE ricorsiva in una stored procedure da LINQ
  3. Usa LINQ, la creazione di query di uno per ogni livello
  4. Usa query LINQ brutto limitata a pochi livelli

Altri suggerimenti

So che questo è in ritardo, ma se si guarda al algoritmi Directed Graph, è possibile ignorare i problemi ricorsivi. prova anche questi 2 articoli:

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

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top