以前要不是使用扩展方法
要么使用如(t2&&判断条件)||(s1&&判断条件)
其实可以简单的实现扩展一个whereIf即可(abp实现),如下所示
···
///


/// Filters a by given predicate if given condition is true.
///

/// Queryable to apply filtering
/// A boolean value
/// Predicate to filter the query
/// Filtered or not filtered query based on
public static IQueryable WhereIf(this IQueryable query, bool condition, Expression<Func<T, bool>> predicate)
{
return condition
? query.Where(predicate)
: query;
}

    /// <summary>
    /// Filters a <see cref="IQueryable{T}"/> by given predicate if given condition is true.
    /// </summary>
    /// <param name="query">Queryable to apply filtering</param>
    /// <param name="condition">A boolean value</param>
    /// <param name="predicate">Predicate to filter the query</param>
    /// <returns>Filtered or not filtered query based on <paramref name="condition"/></returns>
    public static IQueryable<T> WhereIf<T>(this IQueryable<T> query, bool condition, Expression<Func<T, int, bool>> predicate)
    {
        return condition
            ? query.Where(predicate)
            : query;
    }

···

使用

例如:
var query = _taskRepository.GetAll().Include(t => t.AssignedPerson)
.WhereIf(input.State.HasValue, t => t.State == input.State.Value)
.WhereIf(!input.Filter.IsNullOrEmpty(), t => t.Title.Contains(input.Filter))
.WhereIf(input.AssignedPersonId.HasValue, t => t.AssignedPersonId == input.AssignedPersonId.Value);

posted on 2018-07-25 18:39  芝麻的西瓜  阅读(300)  评论(0编辑  收藏  举报