using System.Collections.Generic;
using System.Linq.Expressions;
public int Number { get; set; }
public string Name { get; set; }
public override string ToString()
return $"Number - {Number}, Name - {Name}";
public static void Main(string[] args)
var list = new List<Data> { new Data { Number = 1, Name = "First" }, new Data { Number=2, Name="Second"} };
var param = Expression.Parameter(typeof(Data), "x");
var num = Expression.PropertyOrField(param, "Number");
var body = Expression.Equal(num, Expression.Constant(1));
var lambda = Expression.Lambda<Func<Data, bool>>(body, param);
var list1 = list.FindAll(new Predicate<Data>(lambda.Compile())).ToList();
Console.WriteLine(d.ToString());