expression select表达式动态构建
参考:
http://blog.csdn.net/tastelife/article/details/7340205
http://blog.csdn.net/sweety820/article/details/39203087
源码:
private static Expression<Func<TSource, TResult>> CreateSelecter<TSource, TResult>(Dictionary<string,string> fieldDic)
{
Expression<Func<TSource, TResult>> selector = null;
//(rec)
ParameterExpression param = Expression.Parameter(typeof(TSource), "x");
//new ParadigmSearchListData
var v0 = Expression.New(typeof(TResult));
//Number
List<MemberBinding> bindingList = new List<MemberBinding>();
foreach (var item in fieldDic)
{
var p = typeof(TResult).GetProperty(item.Key);
Expression right = GetProperty<TSource>(null, item.Value, param);
//right= Expression.Constant(right, p.PropertyType);
var v = Expression.Convert(GetProperty<TSource>(null, item.Value, param), p.PropertyType);
var m = Expression.Bind(p, v);
bindingList.Add(m);
}
Expression body = Expression.MemberInit(v0, bindingList);
selector = (Expression<Func<TSource, TResult>>)Expression.Lambda(body, param);
return selector;
}
public static Expression GetProperty<T>(Expression source, string Name, ParameterExpression Param)
{
Name = Name.Replace(")", "");
string[] propertys = null;
if (Name.Contains("=>"))
{
propertys = Name.Split('.').Skip(1).ToArray();
}
else
{
propertys = Name.Split('.');
}
if (source == null)
{
source = Expression.Property(Param, typeof(T).GetProperty(propertys.First()));
}
else
{
source = Expression.Property(source, propertys.First());
}
foreach (var item in propertys.Skip(1))
{
source = GetProperty<T>(source, item, Param);
}
return source;
}
最新文章
- 【重装系统】线上Linux服务器(2TB)分区参考方案
- 帝国时代II 高清版 steam 4.4 字体替换 微软雅黑
- zw版【转发&#183;台湾nvp系列Delphi例程】Delphi 使用 HALCON库件COM控件数据格式转换
- Swift 动画学习笔记
- css写宽为30%的正方形
- sed 变量替换 把m.txt文件中的$i替换成$j
- 电脑cmos是什么?和bois的区别?
- POJ	3548 Restoring the digits
- 开发检测MySQL主从同步插件
- Windows Python requests 详细模块安装方法
- BoltDB简单使用教程
- 安装PyCharm
- python设计模式第十天【观察者模式】
- MATLAB——读取xls文件内容
- Debian ifconfig 命令找不到
- 卡方分布 | t检验 | F检验 | 卡方检验 | 假设检验 | 各种检验持续总结
- 2018.3.15 css课外小知识
- VS2017 IIS 部署.net core web项目
- 新的旅程:NodeJS - 环境篇
- *** error 65: access violation at C:0x001B : no &#39;execute/read&#39; permission