[开发故事]第二回:LINQ来了,先忘记foreach

你看,LINQ已经全面光临了,本文并非探讨LINQ的是是非非,而是通过自己开 发过程的一个小小的侧面来展示,LINQ已经来了,而且更美好。

对技术而言,创新的最大敌人,是转换固有思维,而不是技术本身。

1 引言

今天,Terry点敲了我对于一段代码的处理,诚如本文标题所言,事件缘起于 我对一个List<T>转换的小小处理。首先来看看,这个List<T>转换 双方的本来面目,以一个常见的User类为例而言,User类代表了Model层的实体类 ,其定义为:

// Release : code10, 2008/10/06
// Author : Anytao, http://www.anytao.com
public class User
{
 public int ID { get; set; }
 public string FirstName { get; set; }
 public string SecondName { get; set; }
 public int Age { get; set; }
}

而Account类,则代码了Business Object层的业务类,其定义为:

// Release : code10, 2008/10/06
// Author : Anytao, http://www.anytao.com
public class Account
{
 public int ID { get; set; }
 public string Name { get; set; }
 public int Age { get; set; }
}

那么一件重要的事情,就是如何完成二者之间的转换,尤其是,类似于 List<User>到List<Account>这样的转换,是常常发生在业务处理的 实际操作中。关于二者的区别,属于设计方面的论题,不是本文关注的对象。

2 本来的实现---想起来就是foreach

好了,典型的List<T>转换,我们固有思维中想到的就是循环了,所以 我想都没想就实现了下面的处理过程:

// Release : code10, 2008/10/06
// Author : Anytao, http://www.anytao.com
public List<Account> GetAccounts(List<User> users)
{
 List<Account> accounts = new List<Account> ();

 foreach (User item in users)
 {
  Account account = new Account();
  account.ID = item.ID;
  account.Name = item.FirstName + item.SecondName;
  account.Age = item.Age;
  accounts.Add(account);
 }

 return accounts;
}

固有的思维并没有错,程序和处理诚如以往一样值得回味。但是,忘却和前进 同样重要,所以我忘了用最简单的办法来更优雅的处理这一操作。

时间: 2024-08-02 21:08:26

[开发故事]第二回:LINQ来了,先忘记foreach的相关文章

[开发故事]第三回,实现集合类Sort自定义排序

对集合元素进行排序是经常发生的事情,事实上大部分的集合类型都默认实现 了Sort方法,进行其元素的排序操作.例如List<T>集合的Sort方法有: public void Sort(); public void Sort(Comparison<T> comparison); public void Sort(IComparer<T> comparer); public void Sort(int index,int count,IComparer<T> c

[开发故事]第一回:用简单方式,实现多个可执行文件的合并和执行?

写了很多的关于.NET Framework探讨的文章,偶尔也可以换个口感,本文就算 是这个方向的一个起点,从实践和应用的角度将个别有意思的体会加以分享.简 单也罢,深入也罢,对我来说都是开发中的一个个鲜活的故事,记录下来就是一 种积累. 既然是开发故事,我就不想写得枯燥,让人读者厌烦.因为有太多的枯燥学本 让我感觉无聊,所以[开发故事]就以故事的形式来阐述技术应用的一个个问题. 大部分情况下,我都想将问题简单化处理,拐弯抹角并非真正好的作品,而真正 的企业级应用则可以在此基础上举一反三. 让更多

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - Linq 2 EAS.NET,Orm支持Linq

     前面的文章AgileEAS.NET 4.0重构裁剪,新的ORM.支持Linq,正式支持WPF,开放更多的接口简单的介绍了一下AgileEAS.NET平台在2011年初的一些重大改进措施,其他涉及到有关于Orm体系的改进以及对linq的支持,AgileEAS.NET 快速平台之ORM体系的改进与ORM的新成员一文中对Orm的改进做了介绍,本文将详细的给大家介绍这AgileEAS.NET平台中Orm对Linq技术的支持.   Linq介绍:      LINQ是Language Integ

开发故事:我在项目那些有用的eclipse插件

1. subeclipse 就是这个东东了,用SVN作版本控制的同学你们懂的~ 好像subeclipse1.10这个版本有点问题, 这个选项要选上面的,科普一下:SVNKit (JavaSVN) 是一个纯 Java 的 SVN 客户端库,使用 SVNKit 无需安装任何 SVN 的客户端,支持各种操作系统. 这不是一个开源的类库,但你可以免费使用. 通过SVNKit,你可以在SVN上开发出自己的应用.  2. openexplorer         我们在使用eclipse的时候经常会遇到我想

iPhone界面设计师讲述iOS文本选择功能的开发故事

在2009年6月发布的iOS 3系统中,最重要的功能就是文字复制.粘贴和通过拖拽屏幕上两个大头针选择文字.这种直观的设计要比当时其他智能手机处理复制.粘贴和文本选择的功能体验好很多.复制.粘贴和文本选择对于传统计算机用户体验来说非常基本和重要,苹果的解决方案让该功能在移动平台上变得同样好用. 这份iOS文字选择专利的用户界面设计师是Bas Ording,他在苹果工作了15年,去年离开了苹果.Ording参与开发了包括第一代iPhone在内的多款iPhone.除了文字选择专利,他还主要贡献了iOS

[开发故事]第五回,用想要的域名运行你的本地Web应用

作为Web开发者,在本地部署应用,我们都对localhost有无限的熟悉,也有无限的无奈.不管什么情况下,不同的应用都被冠以localhost:XXXX的地址,好像有性格的Web应该,都只有张三.李四这样的称呼.很多情况下,我们可能想有更个性的url来代表不同的应用,那么没有域名或者不想劳神DNS解析的情况下,让部署于本地的应该,有一个好听的url是不错的想法.那么,我们就不妨来试试. 主要的工作包括两个基本的简单步骤: 配置本机Host 在IIS中配置WebSite 配置本机的Host服务 默

[开发故事]第四回:应用反射在运行时动态获取类型信息

引言 网友hbfly,对于我在[你必须知道的.NET]第三十回:.NET十年(下)一文中 关于"当应用attribute进行运行时反射"的论述,希望举例说明,他提出了自己 的想法:[你必须知道的.NET]第二十四回:认识元数据和IL(上)[你必须知道的.NET]第二十五回:认识元数据和IL(中)[你必须知道的.NET]第二十六回:认识元数据和IL(下) [MyAttribute("text.....")] public mymethod() { //我可以再方法内部

[视频] NicPetShop 开发全过程 第二回

问题描述 27.2MB(28,561,389字节)附加说明.txtvideo.vcp是视频文件源之前用ViewletCam生成的.swf播放到最后时会出现内存问题,导致无法播放的情况同次video.vcp直接提供下载请压缩ViewletCam后,运行ViewletCam.exe打开video.vcpViewletCam是绿色软件,第三方所有,请放心使用. 解决方案 解决方案二:我也想知道,正在找這方面的資料~~~~~解决方案三:这个简单啊,网上搜一下就得到答案了.

如何正确看待Linq的DistinctBy扩展和ForEach扩展

在微软标准的Linq中,并没有DistinctBy扩展和ForEach扩展,但在平时使用工作中却又经常需要使用到这 两个功能,照理来说,微软在Linq中应该包含这两个扩展才对,可事实上为什么并没有呢?本文我就来说说自 己对这两个扩展的理解! 关于DistinctBy扩展 顾名思义,DistinctBy扩展就是根据一个键值进 行唯一性的筛选,将有重复键值的元素剔除,仅保留一个!当然Linq中有Distinct扩展,但其功能简直是弱爆 了!用过的同志相信都对Distinct扩展吐槽无数遍了吧!如果你