Реализация команды SQL МЕЖДУ в Entity Framework Core - PullRequest
0 голосов
/ 20 июня 2019

Мне нужно внедрить команду SQL МЕЖДУ в Entity Framework Core 2.2.4 по соображениям производительности (не спрашивайте почему, это другая история). Я использовал подход, чтобы заменить сервисы ICompositeMethodCallTranslator и IQuerySqlGeneratorFactory собственными обработчиками для внедрения перевода BETWEEN, как здесь: https://github.com/elepner/ef-experiments

Я застрял при переводе MethodCallExpression в правильное выражение SQL. Код ниже выдает BETWEEN([table].[column], @__fromValue_0, @__toValue_1), но мне нужно [table].[column] BETWEEN @__fromValue_0 AND @__toValue_1.

public class BetweenTranslator : IMethodCallTranslator
{
    private static readonly MethodInfo _methodInfo = typeof(EFCoreExtensions).GetRuntimeMethod(nameof(EFCoreExtensions.Between), new[] { typeof(double?), typeof(double), typeof(double) });

    public Expression Translate(MethodCallExpression methodCallExpression)
    {
        if (methodCallExpression.Method != _methodInfo) return null;

        var toValueExpression = methodCallExpression.Arguments[2];
        var fromValueExpression = methodCallExpression.Arguments[1];
        var objectExpression = (ColumnExpression)methodCallExpression.Arguments[0];

        // Syntax: {objectExpression} BETWEEN {fromValueExpression} AND {toValueExpression}

        var sqlExpression = new SqlFunctionExpression("BETWEEN", typeof(bool), new[] { objectExpression, fromValueExpression, toValueExpression });

        return sqlExpression;
    }
}

Как создать правильное выражение МЕЖДУ из выражения MethodCallExc?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...