Benutzer mit den meisten Antworten
Linq auf object-Element anwenden

Frage
-
Salü zäme
Ich versuche etwas mit Linq zu arbeiten, komme aber im speziellen Fall nicht wirklich weiter.
Ich möchte einem Steuerelement die Daten (ArrayList, List, View, etc.) als Objekt übergeben können, damit ich unabhängig vom Datentyp dieses benutzen kann (vgl. beim DataGried das Property ItemsSource).
Mit der Reflection-Methode kann ich die einzelnen Properties der Datensätze erkennen. Nun möchte ich die übergebenen Daten neu gruppieren. Da habe ich mir gedacht, dass dies eine ideale Aufgabe für Linq sein könnte. Doch, weiss ich nun nicht, wie genau vorgehen.
Ich habe es versucht mit "var test = from t1 in (IList)date". Doch das hat dem Compiler nicht gefallen. Wie kann ich dies lösen, ohne für jede mögliche Klasse eine eigene Definition zu schreiben?
Wie oben beschrieben, kann ich mit Reflection die Properties der übergebenen Daten bestimmen. Wie kann ich diese Information in einer Linq-Definition einbauen. Das heisst, ich möchte zuerst die Properties auslesen, über ein User-Interface abfragen, nach welchem Wert aufgeschlüsselt werden soll, um dann anschliessend mit einer Linq-Anweisung dies, unter Angabe des Feldnamens durchzuführen.Ich hoffe, da kann man verstehen, was ich tun möchte. Und noch mehr hoffe ich, jemand kann mir einen Typ geben, wo ich ansetzen könnte.
Jakob Brunner
Jakob Brunner, Switzerland
Antworten
-
Hallo Jakob,
aus Deiner Beschreibung werde ich nicht ganz schlau (kann aber auch an mir liegen ;-)
LINQ funktioniert wirklich gut erst, wenn es einen präziseren Typ als object vorliegen hat,
was daran liegt, dass der Kern auf Enumerable basiert.
Bei dem Typ muß es sich nicht unbedingt um eine Klasse handeln, auch Schnittstellen
wie IComparable<T> oder IEquatable<T> können helfen, gerade wenn es ums von
dir angedeutete Gruppieren (und/oder Sortieren ) geht.
Denn diese Operationen implizieren einen Vergleich zweier Elemente.Im Falle von Reflection wirds komplizierter, da man seine Ausdrücke selbst bauen muß.
Eine Möglichkeit zeigt Dynamic LINQ
(Code in den Visual C# 2010 Samples unter LinqSamples -> DynamicQuery)
Gruß Elmar
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 22. Dezember 2010 11:04
-
Hallo Jakob,
im Großen und Ganzen stimme ich hier mit Elmars Hinweisen überein.
Eventuell ist bei Dir folgendes ein Ansatz:[Visual Expression Builder for Dynamic Linq - CodeProject]
http://www.codeproject.com/KB/linq/VisualLinq.aspxAber in einigen Fällen kann man kein "Dynamic Linq" benutzen.
Gruppierung kann man ansonsten natürlich auch immer durch eigene Berechnung (ohne Linq) erreichen. Es ist in sehr Reflection-lastigen Situationen "manchmal" besser, ohne Linq zu arbeiten (IMHO).
ciao Frank- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 22. Dezember 2010 11:05
Alle Antworten
-
Hallo Jakob,
aus Deiner Beschreibung werde ich nicht ganz schlau (kann aber auch an mir liegen ;-)
LINQ funktioniert wirklich gut erst, wenn es einen präziseren Typ als object vorliegen hat,
was daran liegt, dass der Kern auf Enumerable basiert.
Bei dem Typ muß es sich nicht unbedingt um eine Klasse handeln, auch Schnittstellen
wie IComparable<T> oder IEquatable<T> können helfen, gerade wenn es ums von
dir angedeutete Gruppieren (und/oder Sortieren ) geht.
Denn diese Operationen implizieren einen Vergleich zweier Elemente.Im Falle von Reflection wirds komplizierter, da man seine Ausdrücke selbst bauen muß.
Eine Möglichkeit zeigt Dynamic LINQ
(Code in den Visual C# 2010 Samples unter LinqSamples -> DynamicQuery)
Gruß Elmar
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 22. Dezember 2010 11:04
-
Hallo Jakob,
im Großen und Ganzen stimme ich hier mit Elmars Hinweisen überein.
Eventuell ist bei Dir folgendes ein Ansatz:[Visual Expression Builder for Dynamic Linq - CodeProject]
http://www.codeproject.com/KB/linq/VisualLinq.aspxAber in einigen Fällen kann man kein "Dynamic Linq" benutzen.
Gruppierung kann man ansonsten natürlich auch immer durch eigene Berechnung (ohne Linq) erreichen. Es ist in sehr Reflection-lastigen Situationen "manchmal" besser, ohne Linq zu arbeiten (IMHO).
ciao Frank- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 22. Dezember 2010 11:05