System.Linq.Dynamic字符串转委托
程序员文章站
2023-02-20 14:20:49
以前一直想着有没有一个方法能够把字符串直接转化成函数的,刚好有需求就找了下,还真有。 微软地址:https://docs.microsoft.com/en-us/previous-versions/bb894665(v=msdn.10)?redirectedfrom=MSDN 一、安装 NuGet程 ......
以前一直想着有没有一个方法能够把字符串直接转化成函数的,刚好有需求就找了下,还真有。
微软地址:https://docs.microsoft.com/en-us/previous-versions/bb894665(v=msdn.10)?redirectedfrom=msdn
一、安装
nuget程序管理器,system.linq.dynamic
二、应用与性能:
class model { public string name; public model(string s) { name = s; } } //创建示例数据: model m1 = new model("111"); model m2 = new model("222"); list<model> list = new list<model>(); list.add(m1); list.add(m2); //普通lambda list.where(m=>m.name.startswith("1")).tolist(); //dynamicquery list.asqueryable().where("name.startswith(@0) ", "1").tolist();
效果一样,但性能开销不同,各执行1000次循环:
尝试其他方法,parselambda ,把条件单独出来获得函数委托,再调用linq的where。
var lambda = dynamicexpression.parselambda<model, bool>("name.startswith(@0)", "1"); var fun = expfun.compile(); list.where(s => fun(s)).tolist();
运行1000次看下,虽然和原生的还有差距,但已经在可以接受的范围内了。
三、其他方法:
//dynamicexpression中还有createclass可以实现类的动态创建: var tp = dynamicexpression.createclass(new dynamicproperty("a", typeof(decimal)), new dynamicproperty("b", typeof(decimal))); var obj = activator.createinstance(tp); tp.getproperty("a").setvalue(obj, 12m,null); tp.getproperty("b").setvalue(obj, 10m, null); //此时一个包含a,b属性的实例obj已经创建好,这时利用parselambda<t,s>就可以做到很多事情,比如根据字符串进行运算。 var lambda = dynamicexpression.parselambda(tp,typeof(decimal),"a*b+2"); var fun = lambda.compile(); decimal sum = (decimal)fun.dynamicinvoke(obj); //其他的比如根据已知类型也可进行一些想要的操作: dynamicexpression.parselambda<model, string>("@0 + name", "名字:");
有时string转成函数执行还是很方便的,用这个做一个计算器小程序的话,运算符解析什么的就完全不需要考虑了。
参考链接:
https://www.cnblogs.com/david-qian/archive/2009/01/22/1379596.html
推荐阅读
-
java byte转string乱码(byte数组转字符串java)
-
前端js把json字符串转json对象(java对象转json对象命令)
-
js中json字符串转json对象的方法(提取json格式的数据)
-
改写函数实现PHP二维/三维数组转字符串
-
Android字符串转Ascii码实例代码
-
前端js把json字符串转json对象(java对象转json对象命令)
-
对python3.4 字符串转16进制的实例详解
-
Python任意字符串转16, 32, 64进制的方法
-
java字符串转int方法(免费分享这4种转换方式)
-
java实现图片转base64字符串 java实现base64字符串转图片