Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Linq] Naam die bij parentID hoort queriën

Pagina: 1
Acties:

  • Domih
  • Registratie: Februari 2011
  • Laatst online: 23-09 14:40
Hallo,

Wij hebben op mijn stage een database die werkt met ParentID's.

Wat ik nu wil is 1 variable met de naam van de locatie (bijvoorbeeld Naam: hoofdstraat ID: 2 ParentID: 1)
en de 2e variable die ik wil is de naam van de Parent die erbij hoort(bijvoorbeeld Naam: Amsterdam, ID: 1)

Database ziet er dan ongeveer zo uit:

ID: "1", Name: "Amsterdam", ParentLocationID: "NULL"
ID: "2", Name: "Hoogstraat", ParentLocationID: "1"

Ik heb dan in een foreach loop staan waar hij elke keer bijvoorbeeld "Hoogstraat" pakt, om dat te kunnen zetten in een treeview moet ik de naam van de bijbehorende parent hebben.

Ik ben zelf niet zo heel goed met linq, heb al even zitten knutselen maar het lukt me niet helaas.
Wat ik nu heb geprobeerd:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
          @foreach (var item in Model)
              
              {
                    var ParID =
                        from n in Model
                        where item.ID == item.ParentLocationID 
                        select n.ParentLocationID;
                    var ParName =
                        from n in Model
                        where int.Parse(ParID.ToString()) == item.ID
                        select n.Name.First();
                    @Html.DisplayFor(model => item.Name)
                    Html.Raw("','");
                    @ParName.ToString();
                    Html.Raw("','']");
              }


Het kan zijn dat daar helemaal niks meer vna klopt, maar dat komt omdat ik het 100x veranderd heb vanuit mijn eerste idee.

Als er iets niet duidelijk is dan kan ik meer informatie geven, alvast bedankt!

Edit: Het zit in een stuk JavaScript voor de treeview

Apple Carplay/Android Auto voor BMW/MINI/Audi/Mercedes: Nextgearmedia.nl


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Als je het goed doet heb je volgens mij geen foreach nodig. Gewoon groeperen op parentid en daarna daar de naam bij zoeken (als je maar 2 levels hebt).

edit:
Mooier is misschien andersom: hoogste niveau zoeken en daar vervolgens de kinderen bij zoeken. Je gooit dan niet de items zonder kinderen weg.

[ Voor 33% gewijzigd door Daos op 30-09-2014 18:50 ]


  • Domih
  • Registratie: Februari 2011
  • Laatst online: 23-09 14:40
Daos schreef op dinsdag 30 september 2014 @ 18:30:
Als je het goed doet heb je volgens mij geen foreach nodig. Gewoon groeperen op parentid en daarna daar de naam bij zoeken (als je maar 2 levels hebt).

edit:
Mooier is misschien andersom: hoogste niveau zoeken en daar vervolgens de kinderen bij zoeken. Je gooit dan niet de items zonder kinderen weg.
Er zijn in totaal 5 levels en 20.000 records, dus moet denk ik wel met een foreach loopje toch? Het is me helaas nog steeds niet gelukt

Apple Carplay/Android Auto voor BMW/MINI/Audi/Mercedes: Nextgearmedia.nl


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Tja, dat werkt alleen wanneer alles geladen moet worden. Wil je een subset ervan, dan heb je toch wel een probleem. ;) Maar op zich kan de hashtable/dictionary methode wel goed werken, het enumeraten van een paar duizend rows zal geen minuten duren.

Voor OP zit er waarschijnlijk niets anders op, want de database is nu eenmaal foutief gedesigned: een parent-child relatie opslaan met een FK naar self is dan wel 'textbook' maar ook eigenlijk de meest inefficiente manier van het opslaan van hierarchien. Beter is het een balanced tree op te slaan. Discussie en een 'precalc' hack van yours truly: http://www.llblgen.com/tinyforum/Messages.aspx?ThreadID=3208

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 02:31
Losse opmerking: query's doe je niet in je view maar in je controller

Roomba E5 te koop


  • Domih
  • Registratie: Februari 2011
  • Laatst online: 23-09 14:40
Goedemorgen! :w

Heel erg bedankt voor de reacties, heb aan de hand ervan mijn code over een iets andere boeg gegooid. Ik begrijp niet heel veel van de post van EfBe helaas (door mijn schaarse ervaring)

Wat ik wel kan zeggen is dat de database prima werkt voor het bedrijf waar ik nu stage loop (vast niet 100% effectief, maar het werkt =) )
Ik kan die database ook niet aanpassen, dus daar moet ik het mee doen.

Ik heb nu dit, het probleem zit nog steeds met het zoeken naar de parent die bij parentID hoort.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
                  int parentID;
                  @Html.Raw("['");
                    Html.DisplayFor(model => item.Name);
                    //ChildName
                  @Html.Raw("', '");
                    if (item.ParentLocationID != null)
                    {
                        parentID = int.Parse(Html.DisplayFor(model => item.ParentLocationID).ToString());
                    }
                    else
                    {
                        parentID = 0;
                    }
                    //get parentID
                    
                    //NameOfChildParent goes here

Apple Carplay/Android Auto voor BMW/MINI/Audi/Mercedes: Nextgearmedia.nl


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 02:31
Waarom doe je dit:
C#:
1
parentID = int.Parse(Html.DisplayFor(model => item.ParentLocationID).ToString());

Je kunt meteen de value van item.ParentLocationID gebruiken:
C#:
1
parentID = item.ParentLocationID.Value;

Roomba E5 te koop


  • Domih
  • Registratie: Februari 2011
  • Laatst online: 23-09 14:40
sig69 schreef op woensdag 01 oktober 2014 @ 09:54:
Waarom doe je dit:
C#:
1
parentID = int.Parse(Html.DisplayFor(model => item.ParentLocationID).ToString());

Je kunt meteen de value van item.ParentLocationID gebruiken:
C#:
1
parentID = item.ParentLocationID.Value;
Bedankt lol :P

Ben nog even aan het knutselen, daarna komt er weer een vraag als het niet lukt :P

Het is me gelukt! Ik kan een treeview krijgen van database data.
Heel erg bedankt allemaal O+ Heb weer veel kunnen leren ;)

[ Voor 12% gewijzigd door Domih op 01-10-2014 10:55 ]

Apple Carplay/Android Auto voor BMW/MINI/Audi/Mercedes: Nextgearmedia.nl


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
EfBe schreef op woensdag 01 oktober 2014 @ 06:45:
[...]

Tja, dat werkt alleen wanneer alles geladen moet worden. Wil je een subset ervan, dan heb je toch wel een probleem. ;)
Hangt van je data af; met wat geluk heb je, zeg, een category_id ergens aan hangen en haal je een hele tree van 1 bep. category op; dan kun je best een where category_id = 9 doen ofzo. Maar as said, het hangt af van de data in je tabel; verder heb je uiteraard gelijk en is de opzet an-sich gewoon verkeerd.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
vroeger schreven we dit in SQL. Dan had je niet alleen 100% controlle, maar wist je ook zeker dat je niet teveel data uit je database ophaalde..

tegenwoordig noemen we het LINQ, maar eigenlijk is het geen linq, maar een linq visualisatie van EntityFramework en verdorie, die doet onderwater gewoon SQL...

Volgens mij zijn we er in de afgelopen jaren niet op vooruit gegaan....

This message was sent on 100% recyclable electrons.

Pagina: 1