在使用EF生成动态where子句时,我感到信息过载。一些解决方案似乎非常陈旧(我正在使用.NET 4.5和EF 5)。
这是我的代码:
public enum PersonTypes
{
Lazy = 1,
Awesome = 2,
SuperHero = 3
}
public bool IncludeLazyPeople { get; set; }
public bool IncludeAwesomePeople { get; set; }
public bool IncludeSuperHeroPeople { get; set; }
使用EF,我需要查询与提供的布尔值匹配的人员类型。
我研究了这个链接: http://www.albahari.com/nutshell/predicatebuilder.aspx
以下是我得出的结果:
// create an expression that would include none of the person types
var personTypeExpression = PredicateBuilder.False<DAL.Models.Person>();
if (IncludeLazyPeople)
personTypeExpression = personTypeExpression.Or(person => person.PersonType == (int)PersonTypes.Lazy);
if (IncludeAwesomePeople)
personTypeExpression = personTypeExpression.Or(person => person.PersonType == (int)PersonTypes.Awesome);
if (IncludeSuperHeroPeople)
personTypeExpression = personTypeExpression.Or(person => person.PersonType == (int)PersonTypes.SuperHero);
// filter the people for all included types
var filteredPeople = ctx.People.Where(personTypeExpression);
由于我没有包含 AsExpandable 扩展,所以那个方法失败了。在尝试之前,我想知道是否有更简单的方法?