【发布时间】:2016-10-11 14:39:25
【问题描述】:
我有一个来自 MVC 提交的视图模型类,我想根据用户填写的值从 EF6 获取结果集,但忽略模型中为 null 的那些项目:
public class SearchFilterVM
{
public int? ID { get; set; }
public bool? Active { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleInitial { get; set; }
public DateTime? DateOfBirth { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
}
基本上我正在寻找的是这样的伪代码:
var results = context.Members
.Where(x => x.Active == vm.Active.Value) // but only if vm prop is not null
.Where(x => x.FirstName == vm.FirstName) // but only if vm prop is not null
.Where(x => x.LastName == vm.LastName) // but only if vm prop is not null
.ToList();
(例如,如果过滤器模型属性为空,则完全忽略它们)
我自然不想使用类似上面的东西,因为它会根据第一个条件进行查询,然后根据第二个适用条件重新查询,等等,直到完成(我正在处理 500k+ 行)。
我也想不出为此使用 LINQ 查询表达式的方法。
我可以做的是根据值的存在构建一个参数化的 SQL 语句并附加条件,最后通过 EF6 的 RawSQLQuery 传递它,这将在性能方面发挥作用(并让我很好地控制索引字段的顺序为了更好地调整),但我想知道是否有一种“自然”的方式可以通过 LINQ 完成同样的事情。
【问题讨论】:
标签: c# entity-framework linq entity-framework-6