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
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
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code