Метод Ravendb Session.Query <T>() не возвращает никакого результата при отправке выражения> к (где) метод расширения - PullRequest
0 голосов
/ 22 мая 2018

У меня проблема с сеансом Ravendb. Query.Where ().Когда я использую его таким образом, он работает отлично и возвращает все UserIdentitiy с именем пользователя 'John':

users = session.Query<UserIdentity>().Where(x => x.UserName == "John").ToList();

Но когда я пытаюсь отправить выражение как переменную в метод Where, он молча завершается сбоем и ничего не возвращает,

Expression<Func<UserIdentity, bool>> whereClause = x => x.UserName == "John";

using (var session = _store.OpenSession())
{
    users = session.Query<UserIdentity>().Where(whereClause).ToList();
}

Что не так?

1 Ответ

0 голосов
/ 22 мая 2018

Попробуйте следующий код:

public static class ExpressionTreesExtension
{

    public static Expression<Func<T, bool>> EqualExpression<T>(string columnName,object value)
    {
        ParameterExpression parameterType = Expression.Parameter(typeof(T), "object");

        MemberExpression typeColumn = Expression.Property(parameterType, columnName);

        ConstantExpression constant = Expression.Constant(value, typeof(string));

        BinaryExpression binaryExpression = Expression.Equal(typeColumn, constant);

        return Expression.Lambda<Func<T, bool>>(binaryExpression, parameterType);
    }
}

Использование кода:

Expression<Func<UserIdentity, bool>> whereClause = ExpressionTreesExtension.EqualExpression<UserIdentity>("UserName","John");
...