static void Main(string[] args) { List<Person> list = new List<Person>() { new Person(){ Age=20, Name="wengyuli", Parts=new Part(){ Name="123"}}, new Person(){ Age=30, Name="chenyang", Parts=new Part(){ Name="123456"}}, new Person(){ Age=40, Name="heshuai", Parts=new Part(){ Name="123"}}, new Person(){ Age=50, Name="heyunlong", Parts=new Part(){ Name="123456"}} }; var c = Expression.Parameter(typeof(Person), "m"); Expression condition = Expression.Constant(false); Expression con = Expression.Call( Expression.Property(c,typeof(Person).GetProperty("Name")), typeof(string).GetMethod("StartsWith",new Type[]{typeof(string)}), Expression.Constant("wengyuli")); condition = Expression.Or(con, condition); Expression<Func<Person, bool>> end = Expression.Lambda<Func<Person, bool>>(condition, new ParameterExpression[] { c }); } class Person { public string Name { set; get; } public int Age { set; get; } public Part Parts { set; get; } } class Part { public string Name { set; get; } } }