Entity Framework 4: Konvertiere eine String-Bedingung in einen Lambda-Ausdruck?

8

Ich möchte ein String-Array von Bedingungen vom Client wie field == value akzeptieren. Es wäre wirklich nett, ein Spezifikationsobjekt zu erstellen, das die Zeichenfolge im Konstruktor akzeptieren und einen Lambda-Ausdruck ausgeben könnte, um die Where-Klausel darzustellen. Zum Beispiel könnte ich Folgendes tun:

%Vor%

Wie können Sie "name == Jujyfruits" in DB.Products.Where(p => p.name == "JujyFruits") umwandeln?

    
Zachary Scott 02.05.2011, 04:54
quelle

3 Antworten

14

Sie können

verwenden
  • Reflection, um die Eigenschaft Product.name aus der Zeichenfolge name und
  • zu erhalten
  • die Klasse LINQ Expression , um manuell einen Lambda-Ausdruck zu erstellen.

Beachten Sie, dass das folgende Codebeispiel nur für Equals (==) -Operationen funktioniert. Es ist jedoch leicht, auch auf andere Operationen zu verallgemeinern (auf Leerzeichen aufteilen, den Operator analysieren und den entsprechenden Ausdruck anstelle von Expression.Equal wählen).

%Vor%

Über die Konstruktor-Sache: Da Func<T, TResult> versiegelt ist, kann man nicht davon ableiten. Sie können jedoch einen impliziten Konvertierungsoperator erstellen, der Specification<T> in Func<T, bool> . <Übersetzt / p>     

Heinzi 02.05.2011, 05:26
quelle
3

Wir haben kürzlich die Dynamic LINQ-Bibliothek aus den VS2008-Beispielprojekten entdeckt. Funktioniert perfekt, um string-basierte "Where" -Klauseln in Ausdrücke umzuwandeln.

Dieser Link wird Sie dorthin bringen.

    
Jim Ross 02.05.2011 17:52
quelle
0

Sie müssen Ihren Suchbegriff in ein Prädikat umwandeln. Versuchen Sie etwas wie folgt:

%Vor%     
Paul Suart 02.05.2011 05:02
quelle

Tags und Links