Construyendo el árbol de expresiones para la cadena. Contiene [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿Cómo creo un árbol de expresiones para representar 'String.Contains ("término")' en C #? 4 respuestas

Estoy luchando por construir un árbol de expresiones para poder filtrar dinámicamente algunos datos.

Se me ha ocurrido esto, pero falla en elvar lambda = línea

foreach (var rule in request.Where.Rules)
{
    var parameterExpression = Expression.Parameter(typeof(string), rule.Field);
    var left = Expression.Call(parameterExpression, typeof(string).GetMethod("ToLower", Type.EmptyTypes));
    var right = Expression.Constant(rule.Data.ToLower());
    var method = typeof(string).GetMethod("Contains", new [] { typeof(string) });
    var call = Expression.Call(left, method, right);
    var lambda = Expression.Lambda<Func<T, bool>>(call, parameterExpression);
    query = query.Where(lambda);
}

La varrule tiene un campo (ex "Nombre") que quiero comparar con el texto enrule.Data (ex 'tom'). Así que siT.Name.Contains("tom"); Quiero que la consulta incluya el registro, de lo contrario, no.

La varquery es de tipoIQueryable<T>

EDITAR: Finalmente lo conseguí trabajando con este código:

foreach (var rule in request.Where.Rules)
{
    var parameter = Expression.Parameter(typeof(T), "x");
    var property = Expression.Property(parameter, rule.Field);
    var value = Expression.Constant(rule.Data);
    var type = value.Type; 
    var containsmethod = type.GetMethod("Contains", new[] { typeof(string) });
    var call = Expression.Call(property, containsmethod, value);
    var lambda = Expression.Lambda<Func<T, bool>>(call, parameter);
    query = query.Where(lambda);
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta