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
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
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
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
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
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ß.
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