Supponiamo ho la seguente classe:Come creare dinamicamente un'espressione lambda
public class Show
{
public string Language { get; set; }
public string Name { get; set; }
}
Sulla base di queste informazioni, il mio obiettivo è quello di creare un'espressione lambda come questo:
g => g.Language == lang && g.Name == name
lang
e name
sono variabili locali che vorrei aggiungere come valori costanti durante la creazione dell'espressione.
Come si può vedere, la funzione compilata sarebbe di tipo Func<Genre, bool>
per aiutare a comprendere in modo più chiaro, vorrei realizzare qualcosa di simile a questo:
string lang = "en";
string name = "comedy";
Genre genre = new Genre { Language = "en", Name = "comedy" };
Expression<Func<Genre, bool>> expression = CreateExpression(genre, lang, name);
// expression = (g => g.Language == "en" && g.Name == "comedy")
Sono consapevole del esistenza di alberi di espressione ma sono praticamente nuovo su questo argomento, quindi non so nemmeno come iniziare.
Questo problema può essere risolto? Come posso creare tale espressione dinamicamente?
sto indovinando il problema è mor e complicato nella pratica di quanto tu abbia descritto, giusto? Se conosci le proprietà che stai testando prima del tempo, non puoi scrivere una funzione che restituisce una funzione? – kaveman
@kaveman In realtà, è vero, hai ragione. È troppo complicato per me spiegare senza probabilmente confondere te e persino me stesso. Ho un'interfaccia repository che può interrogare le mie entità usando un'espressione. Il problema è che questa espressione deve essere nel formato sopra indicato: condizioni chiave separate da '&&'. –
@kaveman Sto ricevendo il tipo (nel mio esempio, Genere) come parametro generico, insieme ai valori chiave, quindi ho bisogno di recuperare le mie proprietà chiave tramite riflessione (penso di sapere come farlo) e creare l'espressione quindi posso interrogare le entità di genere –