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

  • 相关阅读:
    Java 位运算
    Java 自增运算
    Java 变量命名规范
    Java 数据类型
    Java 环境配置
    SQL Server-语句类别、数据库范式、系统数据库组成(一)
    Socket连接时,端口是怎么分配的
    【转载】SQL执行计划
    前端页面播放 rtmp 流与 flv 格式视频文件
    C# Winform Soket 网络编程 多个客户端连接服务器并返回客户端操作请求
  • 原文地址:https://www.cnblogs.com/zinan/p/9367678.html
Copyright © 2011-2022 走看看