I am trying to write a linq extension method for entities that accepts Func to select a property identifier and compare it with a list of identifiers.
Classes
public class A { public int AId { get; set; } } public class B { public int BId { get; set; } }
Extension method
public static IQueryable<T> WithId<T>(this IQueryable<T> entities, Func<T, int> selector, IList<int> ids) { Expression<Func<T, bool>> expression = x => ids.Contains(selector(x)); return entities.Where(expression);
Call method
var ids = new List<int> { 1, 2, 3 }; DbContext.EntityAs.WithId(e => e.AId, ids); DbContext.EntityBs.WithId(e => e.BId, ids);
The problem I'm experiencing is that it is trying to call a function that is not allowed in the Entity Framework.
How can I use a property selector (Func) to evaluate a query?
David source share