using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Linq.Expressions; namespace CommonUtil { /// /// Lambda扩展方法 /// public static partial class ExtendUtil { /// /// 若符合条件,执行where /// /// IQueryable /// 数据源 /// 条件 /// where表达式 /// public static IQueryable WhereIf(this IQueryable source, bool condition, Expression> predicate) { return condition ? source.Where(predicate) : source; } /// /// 若符合条件,执行where /// /// IQueryable /// 数据源 /// 条件 /// where表达式 /// public static IQueryable WhereIf(this IQueryable source, bool condition, Expression> predicate) { return condition ? source.Where(predicate) : source; } /// /// 若符合条件,执行where /// /// IEnumerable /// 数据源 /// 条件 /// where表达式 /// public static IEnumerable WhereIf(this IEnumerable source, bool condition, Func predicate) { return condition ? source.Where(predicate) : source; } /// /// 若符合条件,执行where /// /// IEnumerable /// 数据源 /// 条件 /// where表达式 /// public static IEnumerable WhereIf(this IEnumerable source, bool condition, Func predicate) { return condition ? source.Where(predicate) : source; } /// /// 自定义排序 /// /// IQueryable /// 排序关键字 /// 数据源 /// 排序枚举 /// 排序表达式 /// public static IOrderedQueryable OrderBy(this IQueryable source, OrderByEnum orderByEnum, Expression> keySelector) { return OrderByEnum.ASC == orderByEnum ? source.OrderBy(keySelector) : source.OrderByDescending(keySelector); } /// /// 若符合条件,则自定义排序 /// /// IQueryable /// 排序关键字 /// 数据源 /// 条件 /// 排序枚举 /// 排序表达式 /// public static IOrderedQueryable OrderByIf(this IQueryable source, bool condition, OrderByEnum orderByEnum, Expression> keySelector) { return condition ? OrderByEnum.ASC == orderByEnum ? source.OrderBy(keySelector) : source.OrderByDescending(keySelector) : (IOrderedQueryable)source; } /// /// 满足条件执行true情况排序,否则执行false情况排序 /// /// IQueryable /// 排序关键字 /// 数据源 /// 条件 /// true情况排序枚举 /// false情况排序枚举 /// 排序表达式 /// public static IOrderedQueryable OrderByIf(this IQueryable source, bool condition, OrderByEnum trueOrderByEnum, OrderByEnum falseOrderByEnum, Expression> keySelector) { return condition ? OrderByEnum.ASC == trueOrderByEnum ? source.OrderBy(keySelector) : source.OrderByDescending(keySelector) : OrderByEnum.ASC == falseOrderByEnum ? source.OrderBy(keySelector) : source.OrderByDescending(keySelector); } /// /// 满足条件执行true情况排序,否则执行false情况排序 /// /// IQueryable /// 排序关键字 /// 数据源 /// 条件 /// 排序枚举 /// true排序表达式 /// false排序表达式 /// public static IOrderedQueryable OrderByIf(this IQueryable source, bool condition, OrderByEnum orderByEnum, Expression> trueKeySelector, Expression> falseKeySelector) { return condition ? OrderByEnum.ASC == orderByEnum ? source.OrderBy(trueKeySelector) : source.OrderByDescending(trueKeySelector) : OrderByEnum.ASC == orderByEnum ? source.OrderBy(falseKeySelector) : source.OrderByDescending(falseKeySelector); } /// /// 若符合条件,升序排序 /// /// IQueryable /// 排序关键字 /// 数据源 /// 条件 /// 排序表达式 /// public static IOrderedQueryable OrderByAscIf(this IQueryable source, bool condition, Expression> keySelector) { return condition ? source.OrderBy(keySelector) : (IOrderedQueryable)source; } /// /// 若符合true条件,升序true排序表达式 /// /// IQueryable /// 排序关键字 /// 数据源 /// 条件 /// true排序表达式 /// false排序表达式 /// public static IOrderedQueryable OrderByAscIf(this IQueryable source, bool condition, Expression> trueKeySelector, Expression> falseKeySelector) { return condition ? source.OrderBy(trueKeySelector) : source.OrderBy(falseKeySelector); } /// /// 若符合条件,降序排序 /// /// IQueryable /// 排序关键字 /// 数据源 /// 条件 /// 排序表达式 /// public static IOrderedQueryable OrderByDescendingIf(this IQueryable source, bool condition, Expression> keySelector) { return condition ? source.OrderByDescending(keySelector) : (IOrderedQueryable)source; } /// /// 若符合true条件,降序true排序表达式 /// /// IQueryable /// 排序关键字 /// 数据源 /// 条件 /// true排序表达式 /// false排序表达式 /// public static IOrderedQueryable OrderByDescendingIf(this IQueryable source, bool condition, Expression> trueKeySelector, Expression> falseKeySelector) { return condition ? source.OrderByDescending(trueKeySelector) : source.OrderByDescending(falseKeySelector); } /// /// 若符合条件,true排序类型排序 /// /// IOrderedQueryable /// 排序关键字 /// 数据源 /// 条件 /// true排序类型 /// false排序类型 /// 排序表达式 /// public static IOrderedQueryable ThenByIf(this IOrderedQueryable source, bool condition, OrderByEnum trueOrderByEnum, OrderByEnum falseOrderByEnum, Expression> keySelector) { return condition ? OrderByEnum.ASC == trueOrderByEnum ? source.ThenBy(keySelector) : source.ThenByDescending(keySelector) : OrderByEnum.ASC == falseOrderByEnum ? source.ThenBy(keySelector) : source.ThenByDescending(keySelector); } /// /// 若符合条件,true排序表达式排序 /// /// IOrderedQueryable /// 排序关键字 /// 数据源 /// 条件 /// 条件 /// true排序表达式 /// false排序表达式 /// public static IOrderedQueryable ThenByIf(this IOrderedQueryable source, bool condition, OrderByEnum orderByEnum, Expression> trueKeySelector, Expression> falseKeySelector) { return condition ? OrderByEnum.ASC == orderByEnum ? source.OrderBy(trueKeySelector) : source.ThenByDescending(trueKeySelector) : OrderByEnum.ASC == orderByEnum ? source.OrderBy(falseKeySelector) : source.ThenByDescending(falseKeySelector); } /// /// 若符合条件,升序 /// /// IOrderedQueryable /// 排序关键字 /// 数据源 /// 条件 /// 排序表达式 /// public static IOrderedQueryable ThenByAscIf(this IOrderedQueryable source, bool condition, Expression> keySelector) { return condition ? source.ThenBy(keySelector) : source; } /// /// 若符合true条件,true表达式升序 /// /// IOrderedQueryable /// 排序关键字 /// 数据源 /// 条件 /// true排序表达式 /// true排序表达式 /// public static IOrderedQueryable ThenByAscIf(this IOrderedQueryable source, bool condition, Expression> trueKeySelector, Expression> falseKeySelector) { return condition ? source.ThenBy(trueKeySelector) : source.ThenBy(falseKeySelector); } /// /// 若符合true条件,true表达式降序 /// /// IOrderedQueryable /// 排序关键字 /// 数据源 /// 条件 /// 排序表达式 /// public static IOrderedQueryable ThenByDescendingIf(this IOrderedQueryable source, bool condition, Expression> keySelector) { return condition ? source.ThenByDescending(keySelector) : source; } /// /// 若符合条件,降序 /// /// IOrderedQueryable /// 排序关键字 /// 数据源 /// 条件 /// true排序表达式 /// true排序表达式 /// public static IOrderedQueryable ThenByDescendingIf(this IOrderedQueryable source, bool condition, Expression> trueKeySelector, Expression> falseKeySelector) { return condition ? source.ThenByDescending(trueKeySelector) : source.ThenByDescending(falseKeySelector); } } /// /// 排序类型枚举 /// public enum OrderByEnum { /// /// 升序 /// [Description("升序")] ASC, /// /// 降序 /// [Description("降序")] DESCENDING } }