Linq Ravendb Session.Query<;T>;()方法在发送表达式时不返回任何结果<;Func<;T、 布尔>&燃气轮机;到Where()扩展方法

Linq Ravendb Session.Query<;T>;()方法在发送表达式时不返回任何结果<;Func<;T、 布尔>&燃气轮机;到Where()扩展方法,linq,ravendb,Linq,Ravendb,我对Ravendb会话.Query.Where()有问题。 当我这样使用它时,它工作得非常好,并返回用户名为“John”的所有useridentity: users = session.Query<UserIdentity>().Where(x => x.UserName == "John").ToList(); users=session.Query().Where(x=>x.UserName==“John”).ToList(); 但是,当我尝试将表达式作为变量发送到Wh

我对Ravendb会话.Query.Where()有问题。 当我这样使用它时,它工作得非常好,并返回用户名为“John”的所有useridentity:

users = session.Query<UserIdentity>().Where(x => x.UserName == "John").ToList();
users=session.Query().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();
}
表达式whereClause=x=>x.UserName==“John”;
使用(var session=\u store.OpenSession())
{
users=session.Query().Where(Where子句).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);
    }
}
公共静态类ExpressionTreesExtension
{
公共静态表达式等式表达式(字符串列名称、对象值)
{
ParameterExpression parameterType=Expression.Parameter(typeof(T),“object”);
MemberExpression typeColumn=Expression.Property(parameterType,columnName);
ConstantPression常量=表达式.常量(值,类型(字符串));
BinaryExpression BinaryExpression=表达式.Equal(类型列,常量);
返回表达式.Lambda(二进制表达式,参数类型);
}
}
代码用法:

Expression whereClause=ExpressionTreesExtension.EqualExpression(“用户名”、“约翰”);

可以考虑使用“代码> > ExpReutoSt//Cuth-Cube显式创建表达式树,这将像预期的那样工作,发送给服务器的查询是什么?你用的是什么版本?请注意,如果服务器版本为4.0.2,客户端相同,则此操作应该有效。查询与问题正文中的上述内容完全相同。@AyendeRahien我在一个单独的VS项目中隔离了问题,但无论如何它都不起作用。在这种情况下,请在这里创建一个问题:使用repro,我们来看看这个问题。为什么这样更好?不是更好,OP的示例在理想情况下可以工作,但我可以猜测Raven DB API没有正确解析直接提供给该方法的表达式,这只是一种解决方法。主要是表达式解析问题。
Expression<Func<UserIdentity, bool>> whereClause = ExpressionTreesExtension.EqualExpression<UserIdentity>("UserName","John");