欢迎访问 生活随笔!

凯发ag旗舰厅登录网址下载

当前位置: 凯发ag旗舰厅登录网址下载 > 编程语言 > c# >内容正文

c#

【more effective c#】lambda表达式优化 -凯发ag旗舰厅登录网址下载

发布时间:2025/1/21 c# 20 豆豆
凯发ag旗舰厅登录网址下载 收集整理的这篇文章主要介绍了 【more effective c#】lambda表达式优化 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
2010-10-19 08:09 by 空逸云, 2923 阅读, 38 评论, 收藏, 编辑

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

var allemployees = new list() { new employee { employeeid = 1, classification = 1, firstname = "skin", lastname = "sen" } };var earlyfolks = from e in allemployeeswhere e.monthlysalary < 4000 && e.classification == 1 && e.yearsofservice > 20select e;

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

private static bool lowpaidsalaried(employee e, int salar){return e.monthlysalary < salar && e.classification == 1;}

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

var earlyfolks = from e in allemployeewhere lowpaidsalaried(e, 4000) && e.yearsofservice > 20select 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 sequencewhere s.classification == 1 && s.monthlysalary < 4000select s;} var allemployees = findallemployees();var salaried = allemployees.lowpaidsalaried();

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

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

作者:空逸云
出处:http://kongyiyun.cnblogs.com 
本文凯发ag旗舰厅登录网址下载的版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/ppcompany/articles/2701952.html

总结

以上是凯发ag旗舰厅登录网址下载为你收集整理的【more effective c#】lambda表达式优化的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。

  • 上一篇:
  • 下一篇:
网站地图