Autor Beitrag
RobAll
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Di 02.04.19 19:14 
Guten Abend,

ich versuch gerade eine List aus der DB zu füllen.

folgender Testansatz funktioniert:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
ListHersteller = new ObservableCollection<Combolisten>()
                {

                     new Combolisten(){ID=1, Hersteller="H1"}

                    ,new Combolisten(){ID=2 , Hersteller="H2"}};


die Messagebox zeigt die Daten aus der DB an

ausblenden C#-Quelltext
1:
2:
3:
4:
var Hersteller_query = context.Tab_Hersteller.Select(p => new { p.ID, p.Hersteller }


foreach (var item in Hersteller_query) MessageBox.Show(item.ID + item.Hersteller);



Bei folgenden Versuchen bleibt die Liste leer.

V1
ausblenden C#-Quelltext
1:
2:
3:
4:
   ListHersteller = new ObservableCollection<Combolisten>();
                {
                    foreach (var item in Hersteller_query)  new Combolisten() { ID = item.ID, Hersteller = item.Hersteller };
                }


V2
ausblenden C#-Quelltext
1:
2:
 var ListHersteller = new ObservableCollection<Combolisten>();
 ListHersteller.ToList().ForEach(item => context.Tab_Hersteller.Select(p => new { p.ID, p.Hersteller }));


Wer kann mir helfen?
Danke vorab.
VG
RobAll

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 02.04.19 19:50 
In V1 fehlt das Hinzufügen zur Collection via einem Aufruf von Add. Die geschweiften Klammern tun hier gar nix. Das ist so kein Initializer (man beachte das Semikolon hinter dem Construktoraufruf, danach kommt was unabhängiges). In einem Initializer könntest du auch keine Sprachkonstrukte wie z.B. Schleifen ausführen.

In V2 versuchst du über eine leere Liste zu iterieren da passiert dann natürlich auch nichts. Und mit dem ForEach würdest du nur für jedes Element in der Liste etwas tun aber keine Listenelemente erzeugen. Maximal könntest du Elemente verändern.

Du kannst aus context.Tab_Hersteller eine List von deinem Typ erstellen und die dann an den Konstruktor der ObservableCollection übergeben.
Etwa

ausblenden C#-Quelltext
1:
var listHersteller = new ObservableCollection<Combolisten>(context.Tab_Hersteller.Select(p => new Combolisten() { p.ID, p.Hersteller }).ToList());					
RobAll Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Di 02.04.19 21:11 
Danke für das Beispiel.
Den Fehler bekomme ich leider nicht in den Griff
Zitat:
Fehler CS1922 Der Typ "Combolisten" kann nicht mit einem Auflistungsinitialisierer initialisiert werden, da er nicht "System.Collections.IEnumerable" implementiert.

Problem bei { p.ID, p.Hersteller }

Was tun

Moderiert von user profile iconTh69: Quote- und C#-Tags hinzugefügt.
Moderiert von user profile iconTh69: Vollzitat entfernt.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 02.04.19 21:25 
Du musst noch die Felder/Property-Namen des Combolisten Typs hinschreiben.
Ich hatte deinen Code einfach übernommen und aus dem anonymen Typ den konkreten gemacht ohne das auch zu korrigieren.

Also Hersteller
ausblenden C#-Quelltext
1:
new Combolisten() { ID = p.ID, Hersteller = p.Hersteller }					

wenn die Felder/Properties in Combolisten so heißen und vom gleichen Typ sind wie in Tab_Hersteller.

Für diesen Beitrag haben gedankt: RobAll
RobAll Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Di 02.04.19 22:09 
ausblenden C#-Quelltext
1:
ListHersteller = new ObservableCollection<Combolisten>(context.Tab_Hersteller.Select(p => new Combolisten() { ID = p.ID, Hersteller = p.Hersteller }).ToList());					

So hats funktioniert
Danke für die Hilfe!

Moderiert von user profile iconTh69: C#-Tags hinzugefügt.
Moderiert von user profile iconTh69: Vollzitat entfernt.