假设我通过LINQ查询创建了一些匿名类型:
var query = from Person in db.People
join Pet in Pets on Person.ID equals Pet.PersonID
join Thingy in Thingies on Person.ID equals Thingy.PersonID
select new {
Person.ID,
PetName = Pet.Name,
Thing = Thingy.Thing,
OtherThing = Thingy.OtherThing
};
现在我想通过动态构建谓词,对查询应用一些复杂的表达式。对于已知类型,我一直在做类似于这样的事情:
var predicate = PredicateBuilder.False<MyType>();
predicate = predicate.Or(myType => myType.Flag);
if (someCondition) {
var subPredicate = PredicateBuilder.True<MyType>();
subPredicate = subPredicate.And(myType => myType.Thing == someThing);
subPredicate = subPredicate.And(myType => myType.OtherThing == someOtherThing);
predicate = predicate.Or(subPredicate);
}
query = query.Where(predicate);
使用匿名类型是否可以做类似的事情?我没有找到一种方法来使用匿名类型和PredicateBuilder
,也不熟悉其他任何构造来动态构建这样的表达式。 如果不能,那么在动态生成查询的嵌套表达式时,我应该采取另一种方法吗?
ID
和PetName
-Thing
和OtherThing
是什么? - Marc GravellPredicateBuilder
一起使用。实际情况涉及将多个属性与某些过滤器预设进行比较,并从数据库中提取其他数据以进一步限制结果。我编辑了原始查询以生成所有正确的属性供示例使用。 - Mike Cluck.True
或.False
。它可以在GitHub上找到。 - NetMage