Reflexion in Entity Framework C#
Ich versuche, reflektion verwenden, um eine dynamische select-durch Entity Framework.
Die Idee ist, dass die Methode bekommt als Parameter den Namen der Spalte, die den Wert für jede Spalte zu durchsuchen und die Reihenfolge der einzelnen Spalten.
Beispiel:
public anEntity list(String ColumnName, String Value, String Order)
{
//
//...
items = (from r in context.Products
where r.GetType().GetProperty(ColumnName). Contains(Value)))
select r).OrderBy(Order).ToList();
returns Items
}
Ist es möglich? Könnten Sie mir helfen?
- Sie bauen den Ausdruck Baum.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte ich das gleiche! Verbrachte 3 Stunden und die Lösung gefunden!
Ausdruck.Lambda-und query-Generierung zur Laufzeit, einfachste "Wo" Beispiel
Es ist sehr gute Arbeit mit EF, und der Ausdruck>, und LinqKit.
Code ändern, für die Verwendung von dynamischen Typen:
Und für die OrderBy-Verwendung:
Nicht in der Lage zu Sortieren, name-Eigenschaft in LINQ OrderBy
Ja und Nein.
Wenn Sie ausführen, die Elemente zuerst in
IEnumerable<T>
dann kannst du die reflektion funktioniert, sonst kann man keine Reflexion zu werden sql-Abfrage, es sei denn, Sie bauen eine Ausdruck.Aber Sie müssen nicht das Rad neu zu erfinden, hat jemand schon gebaut es für Sie, benutzen Sie einfach Dynamische Linq
Sie nicht nur senden "komplexe Anfragen", umfassen solche Methodenaufrufe als
GetType
zu EF.EF muss ein Ausdruck Struktur der zugrunde liegenden Daten-provider.
Die Doku über die unterstützten Funktionen:
Unterstützt Linq-Methoden in Linq to entities. Linq-to-EF
Können Sie sich vorbereiten, dynamische Abfragen, aber Sie müssen ein wenig Zeit zu bereiten.
Es gibt 2 grundlegende Methoden der Dynamischen Ausdrücken und Abfragen in LINQ.
a) String Dynamische Lambda
System.Linq -.Dynamic finden Sie unter folgenden links
http://msdn.microsoft.com/en-US/vstudio/bb894665.aspx
http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
http://www.scottgu.com/blogposts/dynquery/dynamiclinqcsharp.zip
b) Ausdruck Erstellen Bäumen
Leistungsstärker, aber schwerer zu meistern...
Erstellen von Ausdrücken Bäume mit code hier gefunden:
http://msdn.microsoft.com/en-us/library/system.linq.expressions.aspx
-Ein weiteres tool, das ist ruhig nützlich in diesem Raum ist-Prädikat-generator.
http://www.albahari.com/nutshell/predicatebuilder.aspx
warum nicht einfach mit raw-sql-Anweisung
mehr Informationen hier:
http://www.entityframeworktutorial.net/EntityFramework4.3/raw-sql-query-in-entity-framework.aspx