verwendetes Datenbanksystem: <SQL-Server 2008R2>
Hallo,
eine vom Entity Framework erstellte Klasse (einer SQL-Tabelle - keine Liste und keine Collection!) implementiert ja nicht IEnumerable<T> und daher kann ich kein foreach nutzen.
Ich möchte aber trotzdem jedes einzelne Element der Klasse (also jedes Feld der SQL-Tabelle) in einer Schleife durchgehen. Und das gerne ohne die Klasse zu ändern!
Der Code sollte natürlich auch dann funktionieren, wenn in der SQL-Tabelle zusätzliche Felder angefügt wurden bzw. die Entity-Klasse aktualisiert wurde und dort zusätzliche "Felder" stehen.
Also nochmals: Es geht hier um alle "Felder" eines einzelnen "Datensatzes".
Vielen Dank!
Mfg
Michael
PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!
:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]
hallo m.grauber
Wenn ich Dich richtig verstehe :
Extension Method
public static void ForEach<T>(this IEnumerable<T> enumerable, Action<T> action)
{
foreach (var item in enumerable)
action(item);
}
Aufruf :
modelEntities.DeinContext db = new modelEntities.DeinContext();
db.DeineSQLTabelle.ForEach(i=>i.XXX ......)
Beste Grüsse
Diräkt
Er will wohl sich durch die Felder der Tabelle hangeln nicht durch die Zeilen. Er sucht also etwas womit er sich durch die Properties eines Objektes sich hangeln kann wozu er das auch immer braucht.
Ich kenne mich nicht wirklich mit Datenbanken und Entity-klassen aus, aber wenn du alle felder einer (genauer gesagt: irgendeiner .net-klasse) klasse durchgehen willst, dann geht es wie folgt:
foreach(FiledInfo field in row.GetType().GetFilds(NonPublic|Public|instance))
{
object value=field.GetValue(row);
string fieldName=field.Name;
DoSomthing(name,value);
}
Ok, vielleich wären die propertys zu iterieren besser.
Dies ist die allgemeine methode. Ich habe wie gesagt keine ahnung ob es nicht eine bequemere methode im kontext vom entity-farework gibt.
How to get fields list from Entity framework model (edmx)?
oh verdammt... hätte ich das man früher gewusst, ich habs über reflection gemacht (wobei es bei meinem Ziel, Generierung von Dto Klassen wohl die bessere Variante war, da ich da wirklich nur die Datentypen brauche, keine weiteren Informationen).
Kurz: man geht die MetaData durch, aus denen das EntityFramework sowieso die Klassen generiert.
Hallo Diräkt, witte, Floste und Femaref,
vielen Dank für Eure Hilfe! 👍
auf die ExtensionMethod von Diräkt war ich auch bereits gestoßen - ist aber für Listen und Collections, die kein IEnumerable implementieren. Trotzdem kann der Code gut an einigen anderen Stellen verwendet werden.
Ja, witte hat recht und es sind die "Felder einer Tabelle" und die Properties.
Und Floste hat eine schöne Foreach-Schleife beigesteuert. Diese nutze ich nun mit GetProperties und dann klappt es!
Vielen Dank nochmals an Alle 👍 👍 👍 👍
Mfg
Michael
PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!
:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]
Hi,
bereits gestoßen - ist aber für Listen und Collections, die kein IEnumerable implementieren
Falsch, diese Extensionmethod ist für alle Typen, die IEnumerable implementieren.
Gruß
DevHB
Hallo DevHB,
da hatte ich etwas schneller geschrieben als mein Gehirn funktionierte. Du hast natürlich Recht, wegen "this IEnumerable<T> enumerable" ⚠
Grüße
Mfg
Michael
PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!
:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]