using NCC.Dependency; using NCC.LinqBuilder; using System.Collections.Generic; using System.Linq.Expressions; namespace System.Linq { /// /// IEnumerable 拓展 /// [SuppressSniffer] public static class IEnumerableExtensions { /// /// 根据条件成立再构建 Where 查询 /// /// 泛型类型 /// 集合对象 /// 布尔条件 /// 表达式 /// 新的集合对象 public static IQueryable Where(this IQueryable sources, bool condition, Expression> expression) { return condition ? Queryable.Where(sources, expression) : sources; } /// /// 根据条件成立再构建 Where 查询,支持索引器 /// /// 泛型类型 /// 集合对象 /// 布尔条件 /// 表达式 /// 新的集合对象 public static IQueryable Where(this IQueryable sources, bool condition, Expression> expression) { return condition ? Queryable.Where(sources, expression) : sources; } /// /// 与操作合并多个表达式 /// /// 泛型类型 /// 集合对象 /// 表达式数组 /// 新的集合对象 public static IQueryable Where(this IQueryable sources, params Expression>[] expressions) { if (expressions == null || !expressions.Any()) return sources; if (expressions.Length == 1) return Queryable.Where(sources, expressions[0]); var expression = LinqExpression.Or(); foreach (var _expression in expressions) { expression = expression.Or(_expression); } return Queryable.Where(sources, expression); } /// /// 与操作合并多个表达式,支持索引器 /// /// 泛型类型 /// 集合对象 /// 表达式数组 /// 新的集合对象 public static IQueryable Where(this IQueryable sources, params Expression>[] expressions) { if (expressions == null || !expressions.Any()) return sources; if (expressions.Length == 1) return Queryable.Where(sources, expressions[0]); var expression = LinqExpression.IndexOr(); foreach (var _expression in expressions) { expression = expression.Or(_expression); } return Queryable.Where(sources, expression); } /// /// 根据条件成立再构建 WhereOr 查询 /// /// 泛型类型 /// 集合对象 /// 条件表达式 /// 新的集合对象 public static IQueryable Where(this IQueryable sources, params (bool condition, Expression> expression)[] conditionExpressions) { var expressions = new List>>(); foreach (var (condition, expression) in conditionExpressions) { if (condition) expressions.Add(expression); } return Where(sources, expressions.ToArray()); } /// /// 根据条件成立再构建 WhereOr 查询,支持索引器 /// /// 泛型类型 /// 集合对象 /// 条件表达式 /// 新的集合对象 public static IQueryable Where(this IQueryable sources, params (bool condition, Expression> expression)[] conditionExpressions) { var expressions = new List>>(); foreach (var (condition, expression) in conditionExpressions) { if (condition) expressions.Add(expression); } return Where(sources, expressions.ToArray()); } /// /// 根据条件成立再构建 Where 查询 /// /// 泛型类型 /// 集合对象 /// 布尔条件 /// 表达式 /// 新的集合对象 public static IEnumerable Where(this IEnumerable sources, bool condition, Func expression) { return condition ? sources.Where(expression) : sources; } /// /// 根据条件成立再构建 Where 查询,支持索引器 /// /// 泛型类型 /// 集合对象 /// 布尔条件 /// 表达式 /// 新的集合对象 public static IEnumerable Where(this IEnumerable sources, bool condition, Func expression) { return condition ? sources.Where(expression) : sources; } } }