动态生成具有嵌套属性的linq选择(select)
class SelectItem
{
public string Item { get; set; }
}
class SelectList
{
public int ID { get; set; }
public string Name { get; set; }
public SelectItem Item { get; set; }
}
class SelectListDto : SelectList
{ } static Func<SelectList, SelectListDto> Test()
{
var entityType = typeof(SelectList);
var selectListDtoType = typeof(SelectListDto);
var selectItemType = typeof(SelectItem);
var entityIDProperty = entityType.GetProperty("ID");
var entityNameProperty = entityType.GetProperty("Name");
var entityItemProperty = entityType.GetProperty("Item");
var entityItemItemProperty = entityItemProperty.PropertyType.GetProperty("Item");
var selectListDtoIDProperty = selectListDtoType.GetProperty("ID");
var selectListDtoNameProperty = selectListDtoType.GetProperty("Name");
var selectListDtoItemProperty = selectListDtoType.GetProperty("Item");
var selectListDtoItemItemProperty = selectListDtoItemProperty.PropertyType.GetProperty("Item"); var parameterExpression = Expression.Parameter(entityType);
var newInstantiationExpression = Expression.New(selectListDtoType); var idMemberExpression = Expression.Property(parameterExpression, entityIDProperty);
var nameMemberExpression = Expression.Property(parameterExpression, entityNameProperty);
var itemMemberExpression = Expression.Property(parameterExpression, entityItemProperty); var innerObjNew = Expression.New(selectItemType); var nestedItemMemberExpression = Expression.Property(itemMemberExpression, entityItemItemProperty); var idBinding = Expression.Bind(selectListDtoIDProperty, idMemberExpression);
var nameBinding = Expression.Bind(selectListDtoNameProperty, nameMemberExpression);
var nestedItemBinding = Expression.Bind(entityItemItemProperty, nestedItemMemberExpression); var nestedInit = Expression.MemberInit(innerObjNew, nestedItemBinding); var nestedBinding = Expression.Bind(entityItemProperty, nestedInit);
var bindings = new List<MemberAssignment>() { idBinding, nameBinding, nestedBinding}; var memberInitExpression = Expression.MemberInit(newInstantiationExpression, bindings); var lambda = Expression.Lambda<Func<SelectList, SelectListDto>>(memberInitExpression, parameterExpression);
return lambda.Compile();
}
参考地址:
https://stackoverflow.com/a/51764873
https://stackoverflow.com/a/31465017/7712266
https://docs.microsoft.com/zh-cn/dotnet/csharp/expression-trees
动态生成具有嵌套属性的linq选择(select)的更多相关文章
- 利用runtime动态生成对象?
利用runtime我们能够动态生成对象.属性.方法这特性 假定我们要动态生成DYViewController,并为它创建属性propertyName 1)对象名 NSString *class = @ ...
- Android 通过Java代码生成创建界面。动态生成View,动态设置View属性。addRules详解
废话不多说,本文将会层层深入给大家讲解如何动态的生成一个完整的界面. 本文内容: Java代码中动态生成View Java代码中动态设置View的位置,以及其他的属性 LayoutParams详解 一 ...
- Android 动态生成布局 (多层嵌套)
Android 除了能够载入xml文件,显示布局外,也能够代码生成布局,并通过setContentView(View view)方法显示布局.单独的一层布局,如一个主布局加一个控件(如Button\i ...
- 前端下拉框选择和动态生成调用div
进入到一个项目期中,一边做项目,一边学习其中用到的知识.这些知识都是零碎的,有数据库,有html,有js,还有django.趁周末时间,整理前面遇到过的前端相关的知识点. 下拉框选择 <html ...
- Java动态生成类以及动态添加属性
有个技术实现需求:动态生成类,其中类中的属性来自参数对象中的全部属性以及来自参数对象properties文件. 那么技术实现支持:使用CGLib代理. 具体的实现步骤: 1.配置Maven文件: &l ...
- 动态生成表格呈现还是将表格直接绑定gridview等控件呈现的开发方式选择依据
动态生成表格呈现还是将表格直接绑定gridview等控件呈现的开发方式选择依据:由存储过程决定,如果编写的存储过程可以生成需要呈现的表格则直接绑定,否则要动态生成表格
- 根据数据库记录动态生成C#类及其公共属性并动态执行的解决方案
原文:根据数据库记录动态生成C#类及其公共属性并动态执行的解决方案 问题: C#中,想动态产生这么一个类: public class StatisticsData { public ...
- WPF 动态生成对象属性 (dynamic)
原文:WPF 动态生成对象属性 (dynamic) 项目中列行的数据 都需要动态生成 所以考虑到对象绑定 可需要一个动态生成属性的意思 缺点 加载速度会慢 很明显的慢 解决办法 尽量减轻动态属性的量 ...
- 动态生成html元素并为元素追加属性
动态生成HTML元素的方法有三种: 第一种:document.createElement()创建元素,再用appendChild( )方法将元素添加到指定节点 <!DOCTYPE html> ...
随机推荐
- nginx域名跳转到www下
- 学号20175313 《实现Linux下od -tx -tc XXX的功能》第九周
目录 MyOD 一.题目要求 二.题目理解 三.需求分析 四.设计思路 五.代码链接 六.代码实现过程中遇到的问题 七.运行结果截图 八.参考资料 MyOD 一.题目要求 编写MyOD.java 用j ...
- 【Nginx】-NO.141.Nginx.1 -【Nginx】
Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...
- LeetCode 5 最长对称串
LeetCode 5 最长对称串 最早时候做这道题的时候还是用Java写的,用的是字符串匹配的思路,一直Time Limit Exceeded.甚至还想过用KMP开优化子串查找. public cla ...
- Hydra(爆破神器)
PS:这款暴力密码破解工具相当强大,支持几乎所有协议的在线密码破解,其密码能否被破解关键在于字典是否足够强大.对于社会工程型渗透来说,有时能够得到事半功倍的效果.本文仅从安全角度去探讨测试,使用本文内 ...
- UML与软件建模:第一次作业(UML用例图绘制)
uml第一次作业: 用例图是什么? 用例图我感觉就是把网站中各个用户的动作分解一下,再用rational rose软件把图画出来. 画例图主要分为三个步骤:a 确定系统角色 b 确定用例 c 对用 ...
- 全志A33驱动GT911触摸屏
0x00 环境说明: 所使用的开发板为锐尔威视的插针版A33_Vstar 触摸屏驱动IC为GT911 接线参照开发板的TP线路 0x01 修改系统配置文件: 笔者所使用的A33开发板的系统配置文件路径 ...
- 解决IE浏览器把application/json响应视为文件并尝试下载
下面我的解决方案是针对.net MVC的,其他的解决方案也类似,就是把响应的mimeType换成IE浏览器已经拥有的.如application/json换成text/plain #region 退出登 ...
- Ubuntu 16.04 安装 Apache, MySQL, PHP7.2
先更新系统 sudo apt update 安装PHP 通过修改PPA源的方式来安装 sudo apt-get install software-properties-common python-so ...
- zabbix监控实战<1>
第一章 监控家族 1.1 为什么选择监控? 因为在一个IT集群中或者是一个大环境中,包括各种硬件设备.软件设备等系统的构成也是极其复杂的. 多种应用构成负载的IT业务系统,保证这些资源的正常运转,是一 ...