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