重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

C#中的Lambda表达式怎么优化

本篇内容介绍了“C#中的Lambda表达式怎么优化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

为莲湖等地区用户提供了全套网页设计制作服务,及莲湖网站建设行业解决方案。主营业务为做网站、网站设计、莲湖网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

使用Lambda表达式将会造成Lambda表达式主题部分的代码重复.

var allEmployees = new List() { new Employee { EmployeeId = 1, Classification = 1, FirstName = "Skin", LastName = "Sen" } };  var earlyFolks = from e in allEmployees  where e.MonthlySalary < 4000 && e.Classification == 1 && e.YearsOfService > 20  select e;

若每当我们要获取一次不同工薪阶层的数据.就要重复一次.相信久经"高重用,松耦合"定律的你.肯定会想尽办法将其实现高重用,松耦合.在以前方法调用的时代.可能你会将其提炼出

private static bool LowPaidSalaried(Employee e, int salar)          {     return e.MonthlySalary < salar && e.Classification == 1;          }

这样,每次我们调用的时候,将大大减少代码量,提高可复用性.

var earlyFolks = from e in allEmployee      where LowPaidSalaried(e, 4000) && e.YearsOfService > 20      select e;

然而,很不幸的是.在这里.这种重构的方式反倒降低了其可重用性.实际上,***种方法的可重用性比第二种方法更高些.为什么呢?明明已经提炼出重用方法了.这与Lambda表达式的求值,解析以及最终的执行方式有关.

前面的<>里说过.编译器会根据不同的LINQ Provider将Lambda表达式转换成不同的内容来执行.对于LINQ to Object.将转换成委托方法.而LINQ to SQL则是转换成表达式数.在数据迭代时才会转换成SQL语句执行.所以.若我们是在LINQ2SQL或ADO.Net EF中如此重构.编译期通过了.但运行时将出错.因为无法将你的自定义方法转换成相关的SQL语句.,因此.将抛出一个异常.

难道,Lambda表达式就只能重复再重复了吗?当然不是.在这里.延迟执行很好的将其作用发挥得淋漓精致.前面说过.延迟执行保存的并不是值,而是获取值的方法或者步骤.这样,每次我们调用完"获取"数据的方法.实际上.数据还没获得.得到的.只是一系列的"步骤".我们可以在步骤的的基础上再添加步骤.这样.就***的实现了Lambda下的重构.

public static IQueryable LowPaidSalaried(this IQueryable sequence)          {    return from s in sequence   where s.Classification == 1 && s.MonthlySalary < 4000                     select s;          }var allEmployees = FindAllEmployees();  var salaried = allEmployees.LowPaidSalaried();

这样.只有在需要数据的时候,才会根据"步骤"得到相应的数据.对于IEnumerable,我们可以使用yield return来返回序列.

在复杂的查询中服用Lambda表达式最有效的办法就是封装封闭泛型类型的查询创建扩展方法.通过包含Lambda表达式的小方法叠加"步骤".从而达到最有效的优化.

“C#中的Lambda表达式怎么优化”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


分享标题:C#中的Lambda表达式怎么优化
链接分享:http://cqcxhl.com/article/gdpjdj.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP