Lambda表达式公共拼接函数(原创)

时间:2023-03-09 07:19:47
Lambda表达式公共拼接函数(原创)
 #region Lambda公共拼接函数
/// <summary>
/// LambdaWhere(枚举)
/// </summary>
public enum LambdaWhere : int
{
  And = ,
  Or =
}
/// <summary>
/// Lambda公共拼接函数(来自:http://www.cnblogs.com/CielWater)
/// </summary>
/// <param name="BodyLeft">要拼接的Lambda表达式</param>
/// <param name="BodyRight">要拼接的Lambda表达式</param>
/// <param name="LambdaWhere">拼接方式,And或者Or</param>
/// <returns></returns>
public Expression<Func<T, bool>> Lambda<T>(Expression<Func<T, bool>> BodyLeft, Expression<Func<T, bool>> BodyRight, LambdaWhere LambdaWhere)
{
  if (BodyLeft != null && BodyRight != null)
  {
    ParameterExpression pe = BodyLeft.Parameters.Single();
    switch (LambdaWhere)
    {
      case LambdaWhere.And:
        BodyLeft = Expression.Lambda<Func<T, bool>>(
        Expression.And(BodyLeft.Body, Expression.Invoke(BodyRight, pe)), pe);
        break;
      default:
        BodyLeft = Expression.Lambda<Func<T, bool>>(
        Expression.Or(BodyLeft.Body, Expression.Invoke(BodyRight, pe)), pe);
        break;
    }
  }
  else if (BodyLeft != null)
  {
    return BodyLeft;
  }
  else
  {
    return BodyRight;
  }
  return BodyLeft;
}
#endregion