Combina dos expresiones lambda con expresión interna
Tengo la siguiente estructura de clase:
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; }
}
Estoy tratando de construir una expresión en tiempo de ejecución para buscar entidades por User.Name, Order.Name o User.Auths.Email
Hay tres expresiones que intento combinar:
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));
Combiné con éxito dos primeras expresiones usando ParameterReplacer de este hilo:Cómo combinar dos lambdas
Sin embargo, al combinar la expresión resultante con la expresión de correo electrónico, aparece el siguiente error:
Property 'System.String Email' is not defined for type Order'
Parece que el alcance no sabe nada sobre el parámetro interno 'auth'. ¿Es posible crear la expresión sin reconstruirla desde cero?