I have the next class structure:
public class Order
{
public User User { get; set; }
public string Name { get; set; }
}
public class Authentication
{
public string Email { get; set; }
}
public class User
{
public string Name { get; set; }
public List<Authentication> Auths { get; set; }
}
I'm trying to build an expression at runtime to search entities by User.Name, Order.Name or User.Auths.Email
There are three expressions I'm trying to combine:
Expression<Func<Order, bool>> usernameExpression = order => order.Name.Contains(searchValue);
Expression<Func<Order, bool>> nameExpression = order => order.User.Name.Contains(searchValue);
Expression<Func<Order, bool>> emailExpression = order => order.User.Auths.Any(auth => auth.Email.Contains(searchValue));
I successfully combined two first expressions using ParameterReplacer from this thread: How to Combine two lambdas
However, when combining resulting expression with email expression I get the next error:
Property 'System.String Email' is not defined for type Order'
Looks like the scope doesn't know anything about inner 'auth' parameter.
Is it possible to creeate the expression without rebuilding it from scratch?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…