平顶山文明网:System.Linq.Dynamic字符串转委托

admin 3个月前 (06-25) 科技 43 1

&NBsp;

以前一直想着有没有一个方式能够把字符串直接转化成函数的,恰好有需求就找了下,还真有。

微软地址:https://docs.Microsoft.com/en-us/previous-versions/bb894665(v=msdn.10)?redirectedfrom=MSDN

 

一、安装

NuGet程序管理器,System.Linq.DynaMi

二、应用与性能:

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

https://blog.csdn.net/xuchen_wang/article/details/90749743

 

,

阳光在线

阳光在线www.xzqdaohang.com(原诚信在线)现已开放阳光在线手机版下载。阳光在线游戏公平、公开、公正,用实力赢取信誉。

Sunbet声明:该文看法仅代表作者自己,与本平台无关。转载请注明:平顶山文明网:System.Linq.Dynamic字符串转委托

网友评论

  • (*)

最新评论

  • UG环球官方注册 2020-06-25 02:05:36 回复

    欧博Allbet欢迎进入欧博Allbet官网(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。哎,每天来评论

    1

站点信息

  • 文章总数:621
  • 页面总数:0
  • 分类总数:8
  • 标签总数:1120
  • 评论总数:255
  • 浏览总数:6874