如何将多个linq表达式与逻辑匹配

  • 本文关键字:表达式 linq c# linq
  • 更新时间 :
  • 英文 :


我在列表中有多个表达式。

var expressions = new List<Expression<Func<T, bool>>>() { .... };

我想创建一个扩展方法来匹配它们的AND或or逻辑。

public static class ExpressionExtension{
public static Expression<Func<T, bool>> And(this IList<Expression<Func<T, bool>>> exp){
// for all items with AND
}
public static Expression<Func<T, bool>> Or(this IList<Expression<Func<T, bool>>> exp){
// for all items with OR
}
}

我该怎么做?

作为一个建议,我会重新考虑如何命名扩展。它们似乎对应于现有的LINQAll()Any()方法。您可以为单个谓词添加And()Or(),这将更有意义。

使用谓词生成器:

public static class ExpressionExtensions
{
public static Expression<Func<T, bool>> All<T>(this IEnumerable<Expression<Func<T, bool>>> source) =>
source.Aggregate(PredicateBuilder.True<T>(),
(acc, predicate) => acc.And(predicate) // And() provided by PredicateBuilder
);
public static Expression<Func<T, bool>> Any<T>(this IEnumerable<Expression<Func<T, bool>>> source) =>
source.Aggregate(PredicateBuilder.False<T>(),
(acc, predicate) => acc.Or(predicate) // Or() provided by PredicateBuilder
);
}

最新更新