Laden...

"Praxistauglicher" Linq Query für Parent-Child Beziehung?

Erstellt von sra vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.390 Views
S
sra Themenstarter:in
230 Beiträge seit 2004
vor 14 Jahren
"Praxistauglicher" Linq Query für Parent-Child Beziehung?

Hallo allerseits

Ich möchte eine Art Menüstruktur per Linq aus der DB lesen. Natürlich habe ich das mit einer Parent Child Beziehung gemacht, so dass jeder Menüpunkt einem anderen untergeordnet werden kann.

Jetzt ist es so, dass ich gerne zu den Datenbankfeldern ein zusätzlicher Member namens Level hätte. Sprich: ein Linq Query, das mir alle Einträge in der richtigen Reihenfolge aus der Datenbank holt (also das Child von Eintrag 1 noch vor dem Eintrag 2) und gleichzeitig die "Tiefe" der Verschachtelung erkennt.

Leider habe ich gemerkt, dass ich da ziemlich an meine Linq Grenzen stosse. Vor allem auch, weil ich nicht weiss wie viele "Level" da überhaupt in der DB stecken, ich also quasi einen rekursiven Linq Query bräuchte.

Wie würded ihr so etwas angehen?

Gruss und Danke schonmal für die Inputs

Wenn Zeit in Geschichte übergeht und keine Blüten trägt werden Zukunftsbilder blass //Clueso

5.941 Beiträge seit 2005
vor 14 Jahren

Hallo sra

Wie willst du schlussendlich die Daten darstellen?
Wieso brauchst du die Tiefe?

Ich habe genau das auch schon gemacht, allerdings ohne LINQ.
Willst du schlussendlich eine Objekthierarchie mit den Infos und daraus dann deine Ausgabe zusammenschustern?

Die Tiefe braucht man dafür eigentlich nicht. Es ist natürlich aber möglich, diese auch auszulesen.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

S
sra Themenstarter:in
230 Beiträge seit 2004
vor 14 Jahren

Hallo Peter

Die Tiefe brauche ich nur für die Darstellung, sprich das CSS.
Ich kann eigentlich darauf verzichten, indem ich divs entsprechen der Relation einfach verschachtle und dann per CSS Selektor die Verschachtelung aufgreife, aber irgendwo ist das für mich auch nur Neugier, wie man das mit dem Level wohl umsetzt 😃

Aber auch ohne die Level-Property. Wenn ich im SELECT des Queries die Childs (als Collection - ich habe mir entsprechend eine Association im dbml erstellt) einfach mitselektiere, dann habe ich erst eine Tiefe. Wie mache ich das mit 2, 3 oder 5 Levels?

btw. ich weiss, dass ich mit ASP.NET fertige Menübausteine habe und auch den entsprechenden Provider für meine DB Stuktur irgendwo finden würde (oder ASP.NET meine DB Stuktur machen lassen kann), aber die will ich mal aussen vor lassen, weil ich ein sehr kleines Projekt habe, in dem möglichst viel händisch machen will.

Wenn Zeit in Geschichte übergeht und keine Blüten trägt werden Zukunftsbilder blass //Clueso

5.941 Beiträge seit 2005
vor 14 Jahren

Salute sra

Ok. Mal gucken ob ich an einem Beispiel mit LINQ sehe, ob das einfach geht.
Zu den Divs, ich würde Listen für das Menü nehmen, dann hast du die Semantik schon mal korrekt und sogar die Tiefe ohne das du was machen musst automatisch durch die Verschachtelung formatiert.

Zudem sei noch das Stichwort "Div Suppe" erwähnt.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

S
sra Themenstarter:in
230 Beiträge seit 2004
vor 14 Jahren

mooment... wenn ich das child mitselektiere, habe ich natürlich jede erdenkliche Tiefe. Allerdings kann der Repeater da nicht mit umgehen und ich müsste also dynamisch weitere Repater innerhalb des vorherigen Repeaters erstellen.

Geht es wirklich nicht so einfach ein Menü nachzubauen, das dynamisch in der Tiefe ist, ohne die ganzen Menücontrols und -provider?

edit: zum Thema div-Suppe hast du natürlich recht. Entweder gibt es nicht-hirarchische Links (<a>) mit der level als clientId, oder es gibt korrekt verschachtelte listen 😃

Wenn Zeit in Geschichte übergeht und keine Blüten trägt werden Zukunftsbilder blass //Clueso

1.564 Beiträge seit 2007
vor 14 Jahren

Hallo

Da du leider das verwendete Datenbanksystem nicht angegeben hast kann ich da jetzt einfach mal mutmaßen...

Wenn du SQL Server 2008 verwendest kannst du das recht schick über die neuen HierarchicalID Datentypen machen. Hier ein Web-Cast zu dem Thema:
http://technet.microsoft.com/en-us/sqlserver/dd935859.aspx

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.

5.941 Beiträge seit 2005
vor 14 Jahren

Salute sra

Repeater ist Mist dafür, am besten ein eigenes Control dafür bauen.

Geht es wirklich nicht so einfach ein Menü nachzubauen, das dynamisch in der Tiefe ist, ohne die ganzen Menücontrols und -provider?

Ich habe ein Control dafür gebaut um eben flache Daten in ungeordnete Listen zu rendern.

Ein Beispiel findest du hier:

Veröffentlicht habe ich das allerdings noch nicht, bei Interesse kann ich dir das aber mal schicken.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011