Home > Mobile >  LINQ Expression tree with Substring
LINQ Expression tree with Substring

Time:12-14

I want to create SQL LINQ expression like:

.Where(product => product.name.Substring(3,5).Contains("ma")

Can someone help me to create that expression?

Expression.PropertyOrField(body, "name.Substring(3,5)");

I tried, but I am getting an error

Substring(3,5) is not a member of type 'System.String'

CodePudding user response:

Assume we have a class Product:

public class Product
{
    public string name;
}

Then you can create your Expression as:

Expression<Func<Product, bool>> expression = product => product.name.Substring(3, 5).Contains("ma");
Console.WriteLine(expression); // product => product.name.Substring(3, 5).Contains("ma")

If you need to create your expression manually consider this:

var parameter = Expression.Parameter(typeof(Product), "product");
var expression = Expression.Lambda<Func<Product, bool>>(
    Expression.Call(
        Expression.Call(
            Expression.PropertyOrField(parameter, "name"),
            typeof(string).GetMethod("Substring", new[] { typeof(int), typeof(int) }),
            Expression.Constant(3, typeof(int)),
            Expression.Constant(5, typeof(int))),
        typeof(string).GetMethod("Contains", new[] { typeof(string) }),
        Expression.Constant("ma", typeof(string))),
    parameter);
Console.WriteLine(expression); // product => product.name.Substring(3, 5).Contains("ma")

Hope was helpful for you.

  • Related