gpt4 book ai didi

linq - 将 Expression> 发送到 Where() 扩展方法时,Ravendb Session.Query() 方法不返回任何结果

转载 作者:行者123 更新时间:2023-12-02 02:54:02 26 4
gpt4 key购买 nike

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

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

怎么了?

最佳答案

试试下面的代码:

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

关于linq - 将 Expression<Func<T, bool>> 发送到 Where() 扩展方法时,Ravendb Session.Query<T>() 方法不返回任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50465458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com