none
Optimierte LinQ Abfrage RRS feed

  • Frage

  • Hallo,

    <?xml version="1.0" encoding="utf-8"?>

    <Adressen>

    <Personen>

      <Person>

        <Name>Fischer</Name>

        <Vorname>Manfred</Vorname>

        <Alter>45</Alter>

        <Adresse Ort="Bonn" Strasse="Gasse 1"></Adresse>

      </Person>

      <Kunde>

        <Name>Tollsoft AG</Name>

      </Kunde>

      <Person>

        <Name>Meier</Name>

        <Vorname>Franz</Vorname>

        <Alter>76</Alter>

        <Adresse Ort="Ulm" Strasse="Avenue 12"></Adresse>

      </Person>

      <Person>

        <Name>Schmidt</Name>

        <Vorname>Detlef</Vorname>

        <Alter>28</Alter>

        <Adresse Ort="Bonn" Strasse="Weg 34"></Adresse>

      </Person>

    </Personen>

    </Adressen>

     

    Ich habe das.

      Jetzt möchte ich eine Liste haben, wo nur die Orte vertreten sind.

      Wie kann ich das am besten mit LinQ erreichen?

         Also in diesem Beispiel

                 2 Einträge

    • Bonn
    • Ulm

    Viele Grüße Oliver


    Donnerstag, 26. Oktober 2017 20:00

Antworten

  • Hallo Oliver,

    Ich hoffe, dass Du mit folgendem Codeausschnitt weiterkommst:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml.Linq;
    
    namespace ConsoleApplication1
    {
        class Programm
        {
            static void Main(string[] args)
            {
                string s = "<Pfad zur XML-Datei";
                XDocument xDok = XDocument.Load(s);
                var Ergebnisse = xDok.Descendants("Person").Where(x => (x.Element("Adresse") != null) && (x.Element("Adresse").Attribute("Ort") != null)).Select(x => x.Element("Adresse").Attribute("Ort").Value).Distinct();
                //oder noch kürzer mit Visual C# 6.0 und 7.0
                //var Ergebnisse = xDok.Descendants("Person").Where(x => x.Element("Adresse")?.Attribute("Ort") != null).Select(x => x.Element("Adresse").Attribute("Ort").Value).Distinct();
                foreach (string Ergebnis in Ergebnisse)
                    Console.WriteLine(Ergebnis);
             }
        }
    }

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 27. Oktober 2017 14:00
    Administrator

Alle Antworten

  • Hallo Oliver,

    Ich hoffe, dass Du mit folgendem Codeausschnitt weiterkommst:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml.Linq;
    
    namespace ConsoleApplication1
    {
        class Programm
        {
            static void Main(string[] args)
            {
                string s = "<Pfad zur XML-Datei";
                XDocument xDok = XDocument.Load(s);
                var Ergebnisse = xDok.Descendants("Person").Where(x => (x.Element("Adresse") != null) && (x.Element("Adresse").Attribute("Ort") != null)).Select(x => x.Element("Adresse").Attribute("Ort").Value).Distinct();
                //oder noch kürzer mit Visual C# 6.0 und 7.0
                //var Ergebnisse = xDok.Descendants("Person").Where(x => x.Element("Adresse")?.Attribute("Ort") != null).Select(x => x.Element("Adresse").Attribute("Ort").Value).Distinct();
                foreach (string Ergebnis in Ergebnisse)
                    Console.WriteLine(Ergebnis);
             }
        }
    }

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 27. Oktober 2017 14:00
    Administrator
  • Hallo Dimitar,

    ja Danke.

    Grüße Oliver

    Freitag, 27. Oktober 2017 14:13