动态LINQ查询

            //构造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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值