private void Test1() { Expression <Func <People, Boolean> > where = p => (p.Amount > 4000 || p.Amount < 4500) && p.Name.Length > 2; ExpressionReplaceType <People, Teacher> replace = new ExpressionReplaceType <People, Teacher>(); var newWhere = replace.ReplaceBodyType(where) as Expression <Func <Teacher, Boolean> >; WriteLine(new ParsingExpressionTrees().ParsingExpression(newWhere)); foreach (Teacher item in teachers.Where(newWhere.Compile())) { WriteLine("Teacher:Name【{0}】,Amount【{1}】", item.Name, item.Amount); } }
private void Test2() { var Parsing = new ParsingExpressionTrees(); Expression <Func <People, Student, Boolean> > where = (p, s) => (p.Amount > 4000 || s.Amount < 400) && p.Name.Length > 3 && s.Name.Length > 2; ExpressionReplaceType <Student, Teacher> replace1 = new ExpressionReplaceType <Student, Teacher>(); var newWhere1 = replace1.ReplaceBodyType(where) as Expression <Func <People, Teacher, Boolean> >; var lambda1 = newWhere1.Compile(); WriteLine(Parsing.ParsingExpression(newWhere1)); ExpressionReplaceType <People, Teacher> replace2 = new ExpressionReplaceType <People, Teacher>(); var newWhere2 = replace2.ReplaceBodyType(newWhere1) as Expression <Func <Teacher, Teacher, Boolean> >; var lambda2 = newWhere2.Compile(); WriteLine(Parsing.ParsingExpression(newWhere2)); }