Dynamisch Zu Erstellen Linq Lambda-Ausdruck
Okay, meine Vermutung ist, dass dies schon irgendwo beantwortet und ich bin einfach nicht vertraut genug mit der syntax noch nicht verstanden, so mit mir tragen.
Den Nutzern meiner web-app-filter für eine lange Liste von Elementen in einer gridview, auf die der Zugriff über eine linqdatasource-Steuerelement. Ich bin mit dem OnSelecting Veranstaltung, um weitere filter-Elemente. Ich möchte filter die Elemente basierend auf der Auswahl der Benutzer im DropDownLists.
Zum Beispiel, wählen Sie "Titel" "Enthält" "Fred"
Dies führt zu
e.Result = dbContext.Opps.Where(opp => opp.Title.Contains("Fred"));
Oder "Beschreibung" "Enthält nicht" "Alpha"
Ergebnisse in
e.Result = dbContext.Opps.Where(opp => !opp.Description.Contains("Alpha"));
Möchte ich aufbauen, dass die Expression (System.Linq -.Ausdrücke.Ausdruck>), dynamisch, anstatt verschachtelte switch-Ausdrücke zu generieren, da gibt es eine Reihe von Feldern, die ich überprüfen möchten, und ich auch mit dem StartsWith und EndsWith überprüft. Wenn ich könnte, erstellen Sie einen Ausdruck als string, etwa so:
string stringExpression = string.Format("opp => opp.{0}.{1}(\"{2}\")",
ddlCustomFilter.SelectedValue,
ddlFilterType.SelectedValue,
txtFilterText.Text);
Und dann irgendwie haben es umgewandelt werden in einen Ausdruck... ist das möglich? Oder sollte ich nur den sauren Apfel beißen und erzeugen alle die switch () - Anweisungen erforderlich, um die verschiedenen Ausdrücke?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie sicher bauen den Ausdruck dynamisch, aber ich würde prüfen, mit Dynamische LINQ als eine alternative ersten, obwohl Sie möglicherweise nicht in der Lage sein zu verwenden, Enthält. Darüber hinaus möchten Sie vielleicht zu prüfen, mit PredicateBuilder, komplexe Abfragen zu erstellen Additiv.
versuchen, diesen code...
call ToExpression-Methode()....