Ravendb Session.Query<T>() 方法在发送 Expression<Func<T, bool>> 到 Where() 扩展方法时 return 没有任何结果

Ravendb Session.Query<T>() method does not return any result when sending Expression<Func<T, bool>> to Where() Extension method

我遇到了 Ravendb session.Query.Where() 的问题。 当我像这样使用它时,它可以完美运行并且 returns 所有用户名 'John' 的 UserIdentitiy :

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

但是,当我尝试将表达式作为变量发送到 Where 方法时,它无提示地失败并且 returns 什么也没有。

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

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

怎么了?

试试下面的代码:

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);
    }
}

Code Usage:

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