Necesitaba construir un filtro dinámico y quería seguir usando entidades. Por esta razón, quería usar PredicateBuilder de albahari.C# PredicateBuilder Entidades: El parámetro 'f' no estaba enlazado en la expresión de consulta LINQ to Entities especificada
creé el siguiente código:
var invoerDatums = PredicateBuilder.True<OnderzoeksVragen>();
var inner = PredicateBuilder.False<OnderzoeksVragen>();
foreach (var filter in set.RapportInvoerFilter.ToList())
{
if(filter.IsDate)
{
var date = DateTime.Parse(filter.Waarde);
invoerDatums = invoerDatums.Or(o => o.Van >= date && o.Tot <= date);
}
else
{
string temp = filter.Waarde;
inner = inner.Or(o => o.OnderzoekType == temp);
}
}
invoerDatums = invoerDatums.And(inner);
var onderzoeksVragen = entities.OnderzoeksVragen
.AsExpandable()
.Where(invoerDatums)
.ToList();
Cuando me encontré con el código que había sólo 1 de filtro que no era un filtro de fecha. Entonces solo el predicado interno se llenó. Cuando se ejecutó el predicado, recibí el siguiente error.
El parámetro 'f' no estaba obligado en el LINQ especificado a Entidades su búsqueda expresión.
Mientras buscaba una respuesta Encontré el siguiente page. Pero esto ya está implementado en el LINQKit.
¿Alguien más ha experimentado este error y sabe cómo solucionarlo?
Tuve que quitar también la llamada a AsExpandable() de mi objeto IQueryable original. –
Buena respuesta, pero engañosa. La respuesta de BloodBaz es la respuesta más simple y correcta – Mick