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