【发布时间】:2019-03-18 11:15:21
【问题描述】:
我使用 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();
- 异常失败:
在指定的 LINQ to Entities 查询中未绑定参数“u” 表达
但我需要动态创建过滤器,因为这取决于用户选择的过滤条件。
那么如何正确构建动态过滤器呢?
【问题讨论】:
标签: c# .net entity-framework linq filtering