0

我有一个界面,该用户指示它们之间的一些元素和运算符,我应该显示结果。

用户可以构建一个过滤器,比如p1 OP v1 OR p2 OP v2wherep1p2arePerson属性Age, Name, Location等,v1并且v2是比较值(10、'Maria'、'LA'),OP 是比较运算符(=、<、>),OR 是逻辑运算符(可以也是AND)。

例如:
Age > 18 AND Location = 'Paris',或另一个类似
Name Contains 'andro' AND Sex = 'm'

有了myPeople集合和这个过滤器字符串,我如何使用 Linq.Expressions 构建和应用这个表达式?

我尝试使用DynamicLinq,但实际上我在使用 "Where" on 时遇到了问题List<Person>,显然不是IQueryable......

4

1 回答 1

1

如果您尝试将它与 一起使用List<T>,我不会费心使用表达式树来开始:

public static Func<T, bool> Or<T>(Func<T, bool> predicate1,
                                  Func<T, bool> predicate2)
{
    return t => predicate1(t) || predicate2(t);
}

public static Func<T, bool> And<T>(Func<T, bool> predicate1,
                                   Func<T, bool> predicate2)
{
    return t => predicate1(t) && predicate2(t);
}

然后你可以这样做:

Func<Person, bool> isAdult = person => person.Age > 18;
Func<Person, bool> isInParis = person => person.Location == "Paris";

var personInParis = And(isAdult, isInParis);

对于表达式树的等价物,如果您以后想要这些,请查看PredicateBuilder.

棘手的一点可能是将您的字符串转换为表达式树开始。

如果 Dynamic LINQ 做了你想做的一切你可以AsQueryable使用IQueryable<T>IEnumerable<T>.

于 2011-08-12T12:57:01.427 回答