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);

  • 相关阅读:
    激活程序进程并显示最前
    ClickOnce 部署 API 以编程方式检查应用程序更新
    管理员权限运行
    扩展支持全选的CheckBox列。
    转 winfrom组件圆角
    转 无边框四周阴影
    转 实现类似QQ的窗体停靠
    关闭ShowDialog的模态窗口
    TextBox 显示横线
    转 无损转换Image为Icon
  • 原文地址:https://www.cnblogs.com/zinan/p/9367678.html
Copyright © 2011-2022 走看看