【问题标题】:How to merge expressions in .net core如何在.net core中合并表达式
【发布时间】:2016-10-17 11:25:43
【问题描述】:

在将项目更新到.net core(从完整的.net)之前,我已经使用了这样的东西,来做和操作beetwen两个表达式:

public class ExpressionBuilder<T>
{
    private Expression<Func<T, bool>> _mainExpression;

    public ExpressionBuilder()
    {
        _mainExpression = e => true;
    }

    public void AddExpression(Expression<Func<T, bool>> expression)
    {
        _mainExpression = _mainExpression.And(expression);
    }

    public Expression<Func<T, bool>> Build()
    {
        return _mainExpression;
    }
}

现在变量_mainExpression 没有实现方法And。 合并两个表达式应该怎么做?

【问题讨论】:

  • 这行得通吗?
  • 是的,成功了。
  • 什么框架。我使用 System.Linq 测试了 4.5 和 4.6;使用 System.Linq.Expressions;你确定这不是你的自定义扩展方法吗?msdn.microsoft.com/en-us/library/…msdn.microsoft.com/en-us/library/bb335710(v=vs.110).aspx
  • 框架 - 4.5.1,使用:System 和 System.Linq.Expressions。它工作正常。但是 nvm,它在 .net 核心中不起作用,这是主要问题。
  • 您可能一直在使用 LinqKit 或它的姊妹库 PredicateBuilder(或类似的东西)。这些在 .Net Core 中也可用。

标签: c# .net linq .net-core


【解决方案1】:

试试这个:

            Expression<Func<string, bool>> exp = x => x.Contains("b");
            Expression<Func<string, bool>> exp2 = x => x.Contains("a");
            ParameterExpression param = exp.Parameters[0];
            Expression<Func<string, bool>> accumulator = Expression.Lambda<Func<string, bool>>(Expression.AndAlso(exp.Body, Expression.Invoke(exp2, param)), param);
            var flag = accumulator.Compile()("ab");
            Console.WriteLine(flag);

还可以查看this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-02
    • 2021-09-02
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 2017-02-09
    • 2017-04-22
    • 1970-01-01
    相关资源
    最近更新 更多