在 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 扩展。在我尝试之前,我想知道是否有更简单的方法?