[ kasooo @ 31.05.2010. 16:11 ] @
Pozdrav, novi sam u LinQ-u i naravno problemi.. . Parsiram neki XML koji sam pojednostavio jer je pravi ogroman.
Pokusavam da uradim sledecu stvar...potrebno je da vratim za odgovarajuci targetName,sve njegove sourceName-ove.U ovom slucaju za Name2 trebo bi da vratim listu svih njegovih sourceName-ova.(Name1 i ostale ako ih ima).
Ovo sto sam ja uradio jeste da vrati samo taggedValue koje pronadje za targetName i String koji mu prosledim...

Code (csharp):

 private XDocument xmlDocument;

 internal List<String> get(String targetName)
        {
            var queryResult =
                from c in xmlDocument.Descendants("Element").Descendants("TaggedValue")
                where (c.Attribute("value").Value == "targetName")&&(c.Attribute("value").Value== targetName)
                select c;
         .
         .
         .
        }
 

Code (xml):

<root>
<Element>
     <ModelElement>
           <TaggedValue tag="sourceName" value="Name1"/>
        <TaggedValue tag="targetName" value="Name2"/>
     </ModelElement>
 </Element>          
            .
            .
            .
  <Element>
       <ModelElement>
           <TaggedValue tag="sourceName" value="Name1"/>
        <TaggedValue tag="targetName" value="Name3"/>
     </ModelElement>
</Element>
</root>
 



[Ovu poruku je menjao mmix dana 31.05.2010. u 17:23 GMT+1]
[ mmix @ 31.05.2010. 16:24 ] @
zar ti nije jednostavnije ovo preko XPatha?
[ kasooo @ 31.05.2010. 16:27 ] @
Vec sam krenuo sa LInQ-om...ali sam se na ovome zakuco.
Svaka pomoc je dobrodosla :)
[ mmix @ 31.05.2010. 16:36 ] @
Pa ubaci osnovni xpath u XPathSelectElements() ekstenziju :) pa izvuci parent.Elements()

ako bas hoces LINq2Xml, ali ja i dalje mislim da ti eje najjednostavnije jedan dobar xpath i dve linije c# koda.
[ kasooo @ 31.05.2010. 16:38 ] @
Ne kapiram,posto nisam koristio XPath ...
[ mmix @ 31.05.2010. 16:50 ] @
Ok, onda ajde da se zadrzimo na ovome LINQu

Vec imas kontekst izabranih taggedvalue nodova, izrovaris kroz parrenta u decu koja su sourceName ili kroz siblings unutar taga (ako ti je source name uvek iza ili ispred)


Code (csharp):

            var queryResult =
                from c in xmlDocument.Descendants("Element").Descendants("TaggedValue")
                where (c.Attribute("value").Value == "targetName")&&(c.Attribute("value").Value== targetName)
                select c.Parent.Descendants("sourceName").Attribute("value");

            var queryResult =
                from c in xmlDocument.Descendants("Element").Descendants("TaggedValue")
                where (c.Attribute("value").Value == "targetName")&&(c.Attribute("value").Value== targetName)
                select c.ElementsBeforeSelf("sourceName").Attribute("value");

 


Nemam ovde VS, mozda za ovo fali neka ekstenzija, ali trebalo bi da je to to, vici ako ne radi.
[ kasooo @ 31.05.2010. 18:03 ] @
Code:
select c.Parent.Descendants("sourceName").Attribute("value");


U select-u ne dozvoljava Attribute() vec Attributes()....Uglavnom nekako sam se izvuko iz 2 upita,nista jednostavnije nije moglo,koliko mi se cini...Uglavnom problem je resen.Hvala puno!

[Ovu poruku je menjao kasooo dana 31.05.2010. u 22:53 GMT+1]
[ kasooo @ 26.06.2010. 09:53 ] @
Imam jos jedno pitanje ali sada vezano za LinQ to Objects.

Imam klasu ObjectModel koja sadrzi listu paketa
Code:
List<Package> packages;
.Klasa Package sadrzi listu klasa
Code:
List<Clas> classes;
.
Potrebno je da u jednoj metodi ,koja se nalazi u ObjectModel-u , na osnovu imena klase vratim citav objekat Clas.Kako bi to moglo da se uradi?