using Rapid.Kernel.Reflection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
namespace Rapid.Kernel.Expressions
{
/// <summary>
/// Expression拓展获取Expression中的相关内容
/// </summary>
public static class ExpressionExtension
{
/// <summary>
/// 获取Expression
/// </summary>
/// <param name="expression"></param>
/// <returns></returns>
public static string GetExpression(this Expression expression)
{
var expressionType = expression?.GetType();
var expressionTypeFullName = expressionType?.FullName;
if (expression is MemberExpression memberExpression)
{
var result = memberExpression.RetrieveValue();
if (result.Key)
{
return $"{result.Value?.ToString()}";
}
else
{
return $"{memberExpression.Expression.GetVariable("Name")}" +
$"{StringConsts.ENPeriod}" +
$"{result.Value?.ToString()}";
}
}
else if (expression is LambdaExpression lambdaExpression)
{
return lambdaExpression.Body.GetExpression();
}
else if (expression is UnaryExpression unaryExpression)
{
return unaryExpression.Operand.GetExpression();
}
else if (expression is BinaryExpression binaryExpressio