//构造Student数组
Student[] StudentArrary = new Student[3]
{
new Student(){Name="王清培", Age=24, Sex="男", Address="江苏南京"},
new Student(){Name="陈玉和", Age=23, Sex="女", Address="江苏盐城"},
new Student(){Name="金源", Age=22, Sex="女", Address="江苏淮安"}
};
ParameterExpression parameter = Expression.Parameter(typeof(Student), "stu");//表示二元运算符的左边参数名称
//表示"stu"参数的"stu.Name"中的Name属性,Name属性必须是反射获取的元数据才行,这样框架就才可以找到它
MemberExpression property = Expression.MakeMemberAccess(parameter, typeof(Student).GetMember("Name")[0]);
//表示常量值
Console.WriteLine("请输入要查询人的名称:");
ConstantExpression name = Expression.Constant(Console.ReadLine());//从用户输入流中读取值
BinaryExpression binary = Expression.MakeBinary(ExpressionType.Equal, property, name);//拼接==运算符的左边、右边
//完整的表达式是Lambda才对
LambdaExpression lambda = Expression.Lambda(binary, parameter);
//重要的就在这里,我们将完整的Lambda表达式直接变成可以执行的委托
Func<Student, bool> wheredelegate = lambda.Compile() as Func<Student, bool>;
//将编译后的可执行委托直接放入Where方法中执行
var list2 = StudentArrary.AsQueryable<Student>().Where(wheredelegate);
foreach (var i in list2)
{
Console.WriteLine("查询列表:");
Console.WriteLine("姓名:{0},年龄:{1},地址:{2}", i.Name, i.Age, i.Address);
}
Console.ReadLine();
Student[] StudentArrary = new Student[3]
{
new Student(){Name="王清培", Age=24, Sex="男", Address="江苏南京"},
new Student(){Name="陈玉和", Age=23, Sex="女", Address="江苏盐城"},
new Student(){Name="金源", Age=22, Sex="女", Address="江苏淮安"}
};
ParameterExpression parameter = Expression.Parameter(typeof(Student), "stu");//表示二元运算符的左边参数名称
//表示"stu"参数的"stu.Name"中的Name属性,Name属性必须是反射获取的元数据才行,这样框架就才可以找到它
MemberExpression property = Expression.MakeMemberAccess(parameter, typeof(Student).GetMember("Name")[0]);
//表示常量值
Console.WriteLine("请输入要查询人的名称:");
ConstantExpression name = Expression.Constant(Console.ReadLine());//从用户输入流中读取值
BinaryExpression binary = Expression.MakeBinary(ExpressionType.Equal, property, name);//拼接==运算符的左边、右边
//完整的表达式是Lambda才对
LambdaExpression lambda = Expression.Lambda(binary, parameter);
//重要的就在这里,我们将完整的Lambda表达式直接变成可以执行的委托
Func<Student, bool> wheredelegate = lambda.Compile() as Func<Student, bool>;
//将编译后的可执行委托直接放入Where方法中执行
var list2 = StudentArrary.AsQueryable<Student>().Where(wheredelegate);
foreach (var i in list2)
{
Console.WriteLine("查询列表:");
Console.WriteLine("姓名:{0},年龄:{1},地址:{2}", i.Name, i.Age, i.Address);
}
Console.ReadLine();