private EdmFunction FindFunction(
string namespaceName, string functionName, IList<TypeUsage> argumentTypes, bool isGroupAggregateFunction, Expression Expression)
{
// find the function
IList<EdmFunction> candidateFunctions;
if (!_perspective.TryGetFunctionByName(namespaceName, functionName, false /* ignore case */, out candidateFunctions))
{
ThrowUnresolvableFunction(Expression);
}
Debug.Assert(null != candidateFunctions && candidateFunctions.Count > 0, "provider functions must not be null or empty");
bool isAmbiguous;
var function = FunctionOverloadResolver.ResolveFunctionOverloads(
candidateFunctions, argumentTypes, isGroupAggregateFunction, out isAmbiguous);
if (isAmbiguous || null == function)
{
ThrowUnresolvableFunctionOverload(Expression, isAmbiguous);
}
return function;
}