protected virtual Expression AnalyzeCall(MethodCallExpression expression, IList<Expression> parameters, TranslationContext context) { var operands = expression.GetOperands().ToList(); var operarandsToSkip = expression.Method.IsStatic ? 1 : 0; var originalParameters = operands.Skip(parameters.Count + operarandsToSkip); var newParameters = parameters.Union(originalParameters).ToList(); var dt = expression.Method.DeclaringType; if(dt == typeof(Queryable) || dt == typeof(Enumerable)) return AnalyzeQueryableCall(expression.Method, newParameters, context); if(dt == typeof(Vita.Entities.EntityQueryExtensions)) return AnalyzeQueryExtensionsCall(expression.Method, newParameters, context); if(dt == typeof(string)) return AnalyzeStringCall(expression.Method, newParameters, context); if(dt == typeof(Math)) return AnalyzeMathCall(expression.Method, newParameters, context); return AnalyzeUnknownCall(expression, newParameters, context); }