private DbExpression TranslateLike(MethodCallExpression call)
{
char dummyEscapeChar;
var providerSupportsEscapingLikeArgument = ProviderManifest.SupportsEscapingLikeArgument(out dummyEscapeChar);
var inputExpression = call.Arguments[0];
var patternExpression = call.Arguments[1];
var escapeExpression = (call.Arguments.Count > 2 ? call.Arguments[2] : null);
if (!providerSupportsEscapingLikeArgument && (escapeExpression != null))
{
throw new ProviderIncompatibleException(Strings.ProviderDoesNotSupportEscapingLikeArgument);
}
var translatedPatternExpression = TranslateExpression(patternExpression);
var translatedEscapeExpression = (escapeExpression != null ? TranslateExpression(escapeExpression) : null);
var translatedInputExpression = TranslateExpression(inputExpression);
return escapeExpression != null ?
translatedInputExpression.Like(translatedPatternExpression, translatedEscapeExpression) :
translatedInputExpression.Like(translatedPatternExpression);
}