private Expression GetLambdaExpression(Expression argument)
{
if (ExpressionType.Lambda
== argument.NodeType)
{
return argument;
}
else if (ExpressionType.Quote
== argument.NodeType)
{
return GetLambdaExpression(((UnaryExpression)argument).Operand);
}
else if (ExpressionType.Call
== argument.NodeType)
{
if (typeof(Expression).IsAssignableFrom(argument.Type))
{
var expressionMethod = Expression.Lambda<Func<Expression>>(argument).Compile();
return GetLambdaExpression(
expressionMethod.Invoke());
}
}
else if (ExpressionType.Invoke
== argument.NodeType)
{
if (typeof(Expression).IsAssignableFrom(argument.Type))
{
var expressionMethod = Expression.Lambda<Func<Expression>>(argument).Compile();
return GetLambdaExpression(
expressionMethod.Invoke());
}
}
throw new InvalidOperationException(
Strings.ADP_InternalProviderError((int)EntityUtil.InternalErrorCode.UnexpectedLinqLambdaExpressionFormat));
}