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");
我遇到了 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");