Sto cercando di creare la seguente modo dinamico, però ho dei problemi chiamando il metodo estensione "FirstOrDefault"Expression.Call - Calling estensione LINQ: FirstOrDefault, dove
using(var context = new Entities())
{
var list = context.Engines.Include("Cars").Select(e => e.Cars.FirstOrDefault()).ToList();
}
Ho il seguente
Expression parameter = Expression.Parameter(typeof(Engine), "e");
Expression property = Expression.Property(parameter, "Cars");
- parametro = {e}
- proprietà = {} e.Cars
Quelli sono buoni, ma io sto incontrando un problema quando cerco e chiamo il metodo FirstOrDefault
var result = Expression.Call(typeof(Queryable), "FirstOrDefault", new type[] { typeof(Car)}, property);
Vorrei ottenere
- risultato = {e.Cars.FirstOrDefault()}
ma sto ottenendo un InvalidOperationException
Nessun metodo generico 'FirstOrDefault' su tipo 'System.Linq.Queryable' è compatibile con gli argomenti e gli argomenti del tipo fornito. Non è necessario fornire gli argomenti di tipo se il metodo non è generico.
Qualsiasi aiuto sarebbe molto apprezzato.
Grazie. Adam
Può chiarire? FirstOrDefault non è * di solito * parte del lambda, quindi non è necessario essere coinvolto con Expression –
Il mio obiettivo è creare un lambda all'interno di una lamda, quindi qualcosa di simile: . Dove (e => e.Cars Dove (c => c.Nome == "Honda"). Conta> 0) Questo chiarisce qualcosa o sono confuso? – Aducci