表 达式树

news2024/10/7 6:42:10

》》》可以借助 LINQPad工具
在这里插入图片描述

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using System.Transactions;

namespace EFDemo
{
    public class Product
    {
        public string Product_Name { get; set; }
        public int Product_Price { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<Product> prolist = new List<Product>() {
                new Product(){ Product_Name="苹果手机",Product_Price=5999},
                new Product(){ Product_Name="华为手机",Product_Price=4999},
                new Product(){ Product_Name="华为手机",Product_Price=6999},
                new Product(){ Product_Name="苹果手机",Product_Price=9999}
            };
            var result1= prolist.Where(c =>{ return c.Product_Name == "苹果手机" && c.Product_Price > 6000; });
            foreach (var r in result1)
            {
                Console.WriteLine($"产品名称:{r.Product_Name} 价格:{r.Product_Price}");
            }
            var item=Expression.Parameter(typeof(Product), "item");
            var item_name = Expression.Property(item, "Product_Name");
            var item_price= Expression.Property(item, "Product_Price");
            var query_Name = Expression.Constant("苹果手机");
            var query_Price = Expression.Constant(6000);
            var c1 = Expression.Equal(item_name, query_Name);
            var c2 = Expression.GreaterThan(item_price, query_Price);
            var cc = Expression.And(c1, c2);
            var lambda_expression = Expression.Lambda<Func<Product, bool>>(cc, item);
            var reuslt = lambda_expression.Compile();
           
            Console.WriteLine(lambda_expression.ToString());
            var res = prolist.Where(reuslt);
            foreach (var r in res)
            {
                Console.WriteLine($"产品名称:{r.Product_Name} 价格:{r.Product_Price}");
            }
            Console.ReadKey();
        }
    }
}

在这里插入图片描述

》》》表达式树 编译之后 才是委托

利用表达式树 对象的映射

》》》定义一个泛型静态类 ExpressionMapper<Tin ,Tout>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace EFDemo
{
     public class ExpressionMapper<Tin ,Tout>
    {
        private static Func<Tin, Tout> _Func = null;
        static ExpressionMapper()
        {
            ParameterExpression paramExp = Expression.Parameter(typeof(Tin), "p");
            List<MemberBinding> memberBindingList = new List<MemberBinding>();
            //绑定属性
            foreach (var item in typeof(Tout).GetProperties())
            {
                MemberExpression member = Expression.Property(paramExp, typeof(Tin).GetProperty(item.Name));
                MemberBinding memberBinding = Expression.Bind(item,member);
                memberBindingList.Add(memberBinding);
            }
            //绑定字段
            foreach (var item in typeof(Tout).GetFields())
            {
                MemberExpression member = Expression.Field(paramExp, typeof(Tin).GetField(item.Name));
                MemberBinding memberBinding = Expression.Bind(item, member);
                memberBindingList.Add(memberBinding);
            }
            //创建新对象并初始化
            MemberInitExpression memberInitExp = Expression.MemberInit(Expression.New(typeof(Tout)),memberBindingList.ToArray());
            Expression<Func<Tin, Tout>> funcExp = Expression.Lambda<Func<Tin, Tout>>(memberInitExp, new ParameterExpression[] { paramExp });
            _Func = funcExp.Compile();
        }

        public static Tout Mapper(Tin t)
        {
            return _Func(t);
        }
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1818998.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

直流遥控器DC10-100V 水泵电机远程遥控 SL3036降压恒压

水泵电机的远程遥控技术已经成为工业、农业以及民用领域不可或缺的重要一环。其中&#xff0c;直流遥控器DC10-100V以其出色的性能和广泛的应用领域&#xff0c;成为了市场上的一颗璀璨明星。而SL3036降压恒压技术的运用&#xff0c;更是为水泵电机的远程遥控提供了强有力的支持…

OpenGL-ES 学习(6)---- Ubuntu OES 环境搭建

OpenGL-ES Ubuntu 环境搭建 此的方法在 ubuntu 和 deepin 上验证都可以成功搭建 目录 OpenGL-ES Ubuntu 环境搭建软件包安装第一个三角形基于 glfw 实现基于 X11 实现 软件包安装 sudo apt install libx11-dev sudo apt install libglfw3 libglfw3-dev sudo apt-get install…

WPF学习(3)--不同类通过接口实现同种方法

一、接口概述 1.接口的概念 在C#中&#xff0c;接口&#xff08;interface&#xff09;是一种引用类型&#xff0c;它定义了一组方法、属性、事件或索引器&#xff0c;但不提供实现。接口只定义成员的签名&#xff0c;而具体的实现由实现接口的类或结构体提供。接口使用关键字…

Tita 360评估:有效 360度反馈流程的 10 大步骤

宣传过程 如果你的公司首次引入多方位反馈或 360 度反馈&#xff0c;那么向所有利益相关者描述这一流程至关重要。由于流程太新&#xff0c;很多人还不了解。确保参与该流程的每个人都了解其目的&#xff0c;以及将如何实施该流程和使用其结果。花时间在一对一会议、小组会议和…

6.每日LeetCode-数组类,找到所有数组中消失的数字(Go)

题目 448找到所有数组中消失的数字.go 给你一个含 n 个整数的数组 nums &#xff0c;其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字&#xff0c;并以数组的形式返回结果。 示例 1&#xff1a; 输入&#xff1a;nums [4,3,2,7,8,2,…

后仿真中《SDF反标必懂连载篇》之 <INTERCONNECT/IOPATH> 庐山面目

对于SDF INTERCONNECT ENTRY 描述&#xff0c;我们在之前的文章有详解。 读万卷书&#xff0c;行万里路。 实践很重要。 今天&#xff0c;搞一下SDF INTERCONNECT / IOPATH 延迟数据信息&#xff0c;究竟反标的是哪一路径延时&#xff1f; 一 IOPATH (CELL(CELLTYPE …

STM32F103C8T6 IAP升级

目录 0x00 前言0x01 flash分区0x02 Bootloader0x02 APP设置0x03 升级程序编写0x04 固件烧录 0x00 前言 STM32有三种烧录程序的方式&#xff1a;烧录器下载、拉高boot1进行串口下载(ISP)还有通过在 Bootloader中进行flash擦除和写入(IAP)。 在进行开发之前&#xff0c;你需要了…

上海晋名室外危废品暂存柜助力储能电站行业危废品安全储存

近日又有一台SAVEST室外危废暂存柜项目成功验收交付使用&#xff0c;此次项目主要用于储能电站行业废油、废锂电池等危废品的安全储存。 用户单位在日常工作运营中涉及到废油、废锂电池等危废品的室外安全储存问题。4月中旬用户技术总工在寻找解决方案的过程中搜索到上海晋名的…

蒂姆·库克解释Apple Intelligence和与ChatGPT合作的区别|TodayAI

在2024年全球开发者大会&#xff08;WWDC 2024&#xff09;上&#xff0c;苹果公司首席执行官蒂姆库克&#xff08;Tim Cook&#xff09;隆重介绍了公司的最新人工智能&#xff08;AI&#xff09;计划——Apple Intelligence&#xff0c;并宣布了与OpenAI的ChatGPT的合作。虽然…

突破管理瓶颈:基于前端技术的全面预算编制系统解析

前言 在现代商业环境中&#xff0c;预测销售数据和实际成本是每个公司CEO和领导都极为重视的关键指标。然而&#xff0c;由于市场的不断变化&#xff0c;准确地预测和管理这些数据变得愈发具有挑战性。为了应对这一挑战&#xff0c;建立一个高效的系统来管理和审查销售数据的重…

展位展台设计要注意的问题

1、选择专业的展台设计公司 特装比一般展位设计更要保证展台的独特性&#xff0c;更具可塑性。任何疑问和要求都能得到专业的解答。不论是展台的整体结构&#xff0c;还是展台搭建材料&#xff0c;都能实现良好的沟通&#xff0c;两方面都可以确保参加展会的双赢。 2、缜密的展…

智能家居建材,打造未来家居生活

智能家居建材&#xff0c;正引领着家居行业的新潮流。它融合了先进的科技与人性化的设计&#xff0c;为我们打造了一个充满未来感的家居新体验。 想象一下&#xff0c;当你走进家门&#xff0c;智能门锁自动识别你的身份&#xff0c;轻轻一推即可进入。室内环境自动调节到最舒适…

生成式人工智能 - 本地windows 11 + PyCharm运行stable diffusion流程简述

一、环境说明 硬件:本地电脑windows11、32.0 GB内存、2060的6G的卡。 软件:本地有一个python环境,主要是torch 2.2.2+cu118 二、准备工作 1、下载模型 https://huggingface.co/CompVishttps://huggingface.co/CompVis 进入上面的网址,我这里下载的是这个里面的 …

达到1k stars后,我对大模型开源教程的反思!(附教程)

前 言 “五一”节后第一个开心的消息是我们开源的大模型基础项目(https://github.com/datawhalechina/so-large-lm)已经达到1k stars⭐️了。这个开源项目是为了提供浅显易懂且前沿的大模基础知识而打造的&#xff0c;能收获1k个stars⭐️也是对这个项目的肯定。我为一起付出努…

软考初级网络管理员_07_网络单选题

1.观察交换机状态指示灯初步判断交换机故障&#xff0c;交换机运行中指示灯显示红色表示()。 警告 正常 待机 繁忙 2.通常测试网络连通性采用的命令是()。 Netstat Ping Msconfig Cmd 3.一台16端口的交换机可以产生&#xff08;&#xff09;个冲突域? 1 4 15 16…

诊所管理系统如何重塑患者就医流程

随着信息技术的快速发展&#xff0c;诊所管理系统的应用正在为医疗服务带来革命性的变化。这一系统不仅仅是一种管理工具&#xff0c;更是一种全方位的健康管理解决方案&#xff0c;从诊前、诊中到诊后&#xff0c;为患者提供了一系列便捷、高效的服务&#xff0c;让患者的就医…

Java代码实现获取一个文件夹下所有文件名并输出到指定的txt文件中

当一个文件夹中文件过多时&#xff0c;且需要知道次序跟名称时&#xff0c;下面用一段Java代码来实现&#xff1a; 输出一个文件夹内所有的文件名并在前面标上序号&#xff0c;输出到一个文本文件中 最终效果 序号文件名列表 完整代码 import java.io.File; import java.i…

PostgreSql中使用to_char函数、date()函数可能会导致索引无法充分利用,导致查询速度无法提升

今天在处理接口请求速度慢的问题&#xff0c;惊奇的发现加了索引&#xff0c;但还是请求很忙。由于card_stop_info表有300w条数据&#xff0c;这时候关联查询非常慢&#xff0c;于是我加上匹配项索引&#xff0c;但是发现依然没有改变速度。。这时候去搜了一下才知道pgsql的to_…

随手记:uniapp图片展示,剩余的堆叠

UI效果图&#xff1a; 实现思路&#xff1a; 循环图片数组&#xff0c;只展示几张宽度就为几张图片边距的宽度&#xff0c;剩下的图片直接堆叠展示 点击预览的时候传入当前的下标&#xff0c;如果是点击堆叠的话&#xff0c;下标从堆叠数量开始计算 <template><…

比人工快100倍!给3D模型用上轻量化,老爷机也能起飞!!!!!!

3D可视化开发&#xff0c;考虑最多的要素&#xff0c;当属模型加载流畅度和应用性。但面对单位的电脑、不能升级硬盘的笔记本等&#xff0c;可能还是无法体会到模型丝滑加载的畅快。 况且3D模型数据、格式等&#xff0c;也在不断发展扩充&#xff0c;昔日手工就能“调教”的3D…