zoukankan      html  css  js  c++  java
  • linq 动态判断

    以前要不是使用扩展方法
    要么使用如(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);

  • 相关阅读:
    Go语言学习笔记(3)
    Haskell语言学习笔记(97)Phantom Type
    Rust语言学习笔记(12)
    堆排序 Rust实现
    Rust 智能指针(Rc)
    Rust 泛型
    Rust 枚举
    Rust 结构体
    Rust 引用
    二叉搜索树
  • 原文地址:https://www.cnblogs.com/zinan/p/9367678.html
Copyright © 2011-2022 走看看