Laden...

[erledigt] Entity Framework: Objekt aus Linq-Query ohne foreach "durchgehen"

Erstellt von m.grauber vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.436 Views
M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren
[erledigt] Entity Framework: Objekt aus Linq-Query ohne foreach "durchgehen"

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 :]

D
615 Beiträge seit 2009
vor 13 Jahren

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

W
955 Beiträge seit 2010
vor 13 Jahren

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.

1.130 Beiträge seit 2007
vor 13 Jahren

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.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

F
240 Beiträge seit 2006
vor 13 Jahren

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.

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren

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 :]

D
211 Beiträge seit 2006
vor 13 Jahren

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

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren

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 :]