动态LINQ查询

来源:互联网 发布:中国信息数据安全领域 编辑:程序博客网 时间:2024/06/09 21:03
            //构造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();
0 0
原创粉丝点击