Benutzer mit den meisten Antworten
List<> aus den Einträgen einer anderen List erstellen

Frage
-
Hallo zusammen,
häng wieder Mal fest:
Ich habe eine BindingList mit mehreren Feldern (aus einer Struktur). Diese wird in einer Funktion mit wechselnden Daten gefüllt. Nun benötige ich den Inhalt von zwei Feldern für eine neue Liste. Die Zeilen des einen Feldes sollen die Felder der neuen Liste sein. Mit den Daten des zweiten Feld soll eine Zeile Inhalt erstellt werden.
Konkret:
Liste 1:
(..., Feldname, Inhalt, ...)
Nachname, Mustermann
Vorname, Max
sollen werden zu Liste 2:
(Nachname, Vorname)
Mustermann, Max
Wie würde Ihr das machen? Ziel der 2. Liste ist es, eine XML-Datei für den Export zu erstellen.
Besten Dank und freundliche Grüße
Markus
Antworten
-
Hi Markus,
wenn klar ist, wann ein Wechsel zum nächsten Datenobjekt erkannt wird, ist das ganz einfach. In der folgenden Konsolen-Demo habe ich mal den Wechsel mit dem nächsten Nachnamen ermittelt.using System; using System.Collections.Generic; using System.Xml.Linq; namespace ConsoleApp1 { class Program39 { static void Main(string[] args) { try { Demo c = new Demo(); c.Execute(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } Console.WriteLine("Fertig, Abschluss mit beliebiger Taste"); Console.ReadKey(); } class Demo { internal void Execute() { // Ausgangsliste List<Data1> liste1 = new List<Data1>() { new Data1() {Feldname= "Nachname", Inhalt= "Mustermann" }, new Data1() {Feldname= "Vorname", Inhalt= "Max" }, new Data1() {Feldname= "Nachname", Inhalt= "Lehmann" }, new Data1() {Feldname= "Vorname", Inhalt= "Klaus" }, new Data1() {Feldname= "Nachname", Inhalt= "Müller" }, new Data1() {Feldname= "Vorname", Inhalt= "Hans" } }; // Ergebnis-Objekt XElement result = new XElement("root"); // einzufügendes Datenobjekt XElement data = null; // Azúsgangsliste durchlaufen foreach (Data1 item in liste1) { // neues Datenobjekt if (item.Feldname=="Nachname") { // letztes Datenobjekt anhängen if (data != null) result.Add(data); // nächste Datenobjekt vorbereiten data = new XElement("Data"); } // aktuelles Datenobjekt füllen data.Add(new XElement(item.Feldname) { Value = item.Inhalt }); } // letztes Datenopbjekt nicht vergessen! if (data != null) result.Add(data); // Kontrollanzeige Console.WriteLine(result.ToString()); } } internal class Data1 { internal string Feldname { get; set; } internal string Inhalt { get; set; } } } }
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort markiert Maks M Dienstag, 20. Februar 2018 20:52
Alle Antworten
-
Hi Markus,
wenn klar ist, wann ein Wechsel zum nächsten Datenobjekt erkannt wird, ist das ganz einfach. In der folgenden Konsolen-Demo habe ich mal den Wechsel mit dem nächsten Nachnamen ermittelt.using System; using System.Collections.Generic; using System.Xml.Linq; namespace ConsoleApp1 { class Program39 { static void Main(string[] args) { try { Demo c = new Demo(); c.Execute(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } Console.WriteLine("Fertig, Abschluss mit beliebiger Taste"); Console.ReadKey(); } class Demo { internal void Execute() { // Ausgangsliste List<Data1> liste1 = new List<Data1>() { new Data1() {Feldname= "Nachname", Inhalt= "Mustermann" }, new Data1() {Feldname= "Vorname", Inhalt= "Max" }, new Data1() {Feldname= "Nachname", Inhalt= "Lehmann" }, new Data1() {Feldname= "Vorname", Inhalt= "Klaus" }, new Data1() {Feldname= "Nachname", Inhalt= "Müller" }, new Data1() {Feldname= "Vorname", Inhalt= "Hans" } }; // Ergebnis-Objekt XElement result = new XElement("root"); // einzufügendes Datenobjekt XElement data = null; // Azúsgangsliste durchlaufen foreach (Data1 item in liste1) { // neues Datenobjekt if (item.Feldname=="Nachname") { // letztes Datenobjekt anhängen if (data != null) result.Add(data); // nächste Datenobjekt vorbereiten data = new XElement("Data"); } // aktuelles Datenobjekt füllen data.Add(new XElement(item.Feldname) { Value = item.Inhalt }); } // letztes Datenopbjekt nicht vergessen! if (data != null) result.Add(data); // Kontrollanzeige Console.WriteLine(result.ToString()); } } internal class Data1 { internal string Feldname { get; set; } internal string Inhalt { get; set; } } } }
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort markiert Maks M Dienstag, 20. Februar 2018 20:52