Я использую Entity Framework 6 и не использую LINQKit.
Допустим, у нас есть пользовательский интерфейс, в котором пользователь может фильтровать клиентов только по имени ИЛИ только по фамилии ИЛИ по имени и фамилии (это чрезвычайно упрощено, но отражает мою ситуацию).
Если я использую статический фильтр - он работает:
Expression<Func<Client, Boolean>> staticFilter = (c) => c.Name.Equals(someName) && c.Surname.Equals(someSurname);
var filteredClientsStaticFilter = context.Clients.Where(staticFilter).ToList();
Но если я попытаюсь создать тот же фильтр динамически:
Expression<Func<Client, Boolean>> nameFilter = (c) => c.Name.Equals(someName);
Expression<Func<Client, Boolean>> surnameFilter = (c) => c.Surname.Equals(someSurname);
var expr = Expression.And(nameFilter.Body, surnameFilter.Body);
var dynamicFilter = Expression.Lambda<Func<Client, Boolean>>(expr, nameFilter.Parameters[0]);
var filteredClientsDynamicFilter = context.Clients.Where(dynamicFilter).ToList();
- происходит сбой за исключением:
Параметр 'u' не был связан в указанном запросе LINQ to Entities
выражение
Но мне нужно создать фильтр динамически, потому что это зависит от пользователя, какое условие фильтра он выберет.
Так как правильно построить динамический фильтр?