【问题标题】:Lambda expression to create AND filter用于创建 AND 过滤器的 Lambda 表达式
【发布时间】:2017-11-06 15:48:57
【问题描述】:

我使用这段代码创建了一个搜索过滤器。

我需要的是传递一个数据数组并通过 AND 过滤这些数据。

Expression<Func<serveis, bool>> CombineWithAnd<T>(Expression<Func<T, bool>> firstExpression, Expression<Func<T, bool>> secondExpression)
{            
    var parameter = Expression.Parameter(typeof(T), "z");            
    var resultBody = Expression.AndAlso(Expression.Invoke(firstExpression, parameter), Expression.Invoke(secondExpression, parameter));

    return Expression.Lambda<Func<serveis, bool>>(resultBody, parameter);    
}

然后:

Expression<Func<T, bool>> resultExpression = n => false;     

foreach (var car in cars)
{    
    Expression<Func<T, bool>> expression = x => x.color_car.Any(z => z.car == car);
    resultExpression = CombineWithAnd(resultExpression, expression);
}

query = query.Where(resultExpression.Compile());

如果我使用 OR 或 OrElse 使用相同的代码,则搜索工作正常。

但我还需要通过 AND 或 AndAlso 执行搜索,它总是返回零个结果。

我已经在数据库中检查过,有 AND 和 OR 结果。

【问题讨论】:

    标签: c# asp.net linq lambda linqkit


    【解决方案1】:

    对于 AND,您应该替换开始的“左侧”:

    Expression<Func<T, bool>> resultExpression = n => false; 
    

    与:

    Expression<Func<T, bool>> resultExpression = n => true; 
    

    因为目前无论右侧如何,左侧都无法满足您的条件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多