Laden...

Linq To XML Verbinden von Abfragen

Erstellt von Yeats vor 11 Jahren Letzter Beitrag vor 11 Jahren 824 Views
Y
Yeats Themenstarter:in
102 Beiträge seit 2005
vor 11 Jahren
Linq To XML Verbinden von Abfragen

Hallo,

Wie in der Überschrift zu lesen ist, habe ich eine Frage dazu, wie man mit Linq To XML zwei Abfragen miteinander verbindet. Die Struktur meiner XML-Datei sieht wie folgt aus:


<Staedte>
<Stadt Name="NameDerStadt">
<Produkt Name="NameDesProdukts">
<Element1/>
<Element2/>
</Produkt>
<Produkt Name"...">
</Produkt>
</Stadt>
<Stadt Name="...">
...
</Stadt>
</Staedte>

Nun habe ich zwei Abfragen erstellt. Die erste Abfrage liefert mir eine bestimmte Stadt, die Zweite ein bestimmtes Produkt. Nun würde ich gerne beide Abfragen miteinander zu einer einzigen Abfrage kombinieren.


var City =
                from cities in Document.Descendants("Stadt")
                where (string)cities.Attribute("Name") == Cityname
                select cities;

var Product = 
                from Prod in City.Descendants("Produkt")
                where (string)Prod.Attribute("Name") == ProductName
                select Prod;

Allerdings bekomme ich die Abfrage nicht so hin wie ich es gerne hätte und bitte nun hier um Hilfe.
Wäre toll wenn mir jemand erklären könnte wie die Abfrage-Syntax zu schreiben ist.

Mit freundlichen Grüssen,
Yeats

16.834 Beiträge seit 2008
vor 11 Jahren

Mittels let kannst Du im Query Variablen definieren.

var result = from element in xDocument.Root.Elements()
                  let stadtNodes = element.Where(el => el.LocalName.Equals("Stadt",  StringComparison.OrdinalIgnoreCase))
                  let produktNodes = element.Where(el => el.LocalName.Equals("Produkt",  StringComparison.OrdinalIgnoreCase))
/* hier Deine Selects*/

                  let stuttgartNodes = stadtNodes.Where(node => node.Attribute.Value.Equals("Stuttgart", StringComparison.OrdinalIgnoreCase))
                  select stuttgartNodes ;

Variablen schreibt man klein. Siehe auch C# Naming Guideline

Siehe auch Basics of LINQ & Lamda Expressions