Group by a lekérdezésben

+1 vote
asked Apr 10, 2015 in IRF tantárgy by Fantom (77 points)  

A feladatomban eszközöket kell, hogy lekérdezzek.
Egyszerűsítve: Az eszköznek van A és B tulajdonsága.
Néhány eszköz:
A="1"; B="hello"
A="1"; B="szia"
A="2"; B="csá"
XML-be kell kiírni őket így:

<Kulso A="1">
    <Belso B="hello" />
    <Belso B="szia" />
</Kulso>
<Kulso A="2">
    <Belso B="csá" />
</Kulso>

Remélem értehtő, hogy mi a koncepció.

Eddig így csináltam meg:
Nem túl szépnek mondható a megoldás.
Kihasználom azt, hogy egy sima lekérdezésnek (ami A-t és B-t kérdezi le) az eredményében egymás után jönnek az azonos A értékű eszközök.
Így a script-ben simán fel tudom dolgozni és a helyes kimenetet generálni

Ahogy szerintem elegáns lenne:
Először lekérni valahogy, hogy milyen A értékek vannak. (Ekkor csinálom meg a Kulso taget)
Minden A-hoz lekérni az összes B-t. (Ekkor pedig hozzáadogatni a Belso tageket)

Kérdéseim:

  1. Elfogadható-e a mostani megoldásom?
  2. Az elegáns megoldáshoz valami iránymutatást kérlek adjatok:

Mint ahogy a kérdés címe is, valami féle Group By dolgot szeretnék. (Érdekel parancs, lmgify, a segédletből egy rész ami esetleg elkerülte a figyelmemet)
Nem nagyon pazarlás, hogy annyi lekérdezést indítok majd?

1 Answer

+2 votes
answered Apr 10, 2015 by kovari (2,221 points)  

Arra támaszkodni, hogy majd a lekérdezések során pontosan abban a sorrendben kapod vissza a példányokat, mint ami neked ideális, veszélyes. Akkor már inkább rendezd te magad az elemeket, akár lokálisan. Vagy, csak egyszerűen iterálva a listádon folyton keresd meg xml-ben az elem helyét. Biztosan van rá megfelelő powershell támogatás. (kulcsszó: XPath)

Viszont, annyi darab lekérdezést indítani, ahány különböző darab A elem van, fölösleges, és egyértelműen hiba. Érezhetően a szerveroldali lekérdezésekkel kell minél inkább spórolni.

commented Apr 10, 2015 by Fantom (77 points)  
Ez a rendezéses dolog tetszik. Így mindössze egyszer kell csak a szerverhez fordulnom.
Tömbbe kerülnek a CimInstance-ek.
Így próbálom, de nem értem, hogy miért nem jó:
$array = $array| sort($array.ValamelyikProperty)
Teszteltem egy csomót. Ha magam hozok létre hash táblákat és teszem azokat be egy tömbbe, akkor jól működik
De a CimInstance tömbben nem.
Nincs ötleted, hogy miért? Tudsz jobb sorbatevést?
...