LINQ横向对比foreach方法
创始人
2024-03-27 09:31:19
0

1 引言

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

    // Release : code10, 2009/05/06
   // Author  : Anytao, http://www.51cto.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, 2009/05/06
    // Author  : Anytao, http://www.51cto.com    
public class Account    {        public int ID { get; set; }        
public string Name { get; set; }        public int Age { get; set; }    }

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

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

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

        // Release : code10, 2009/05/06
         // Author  : Anytao, http://www.51cto.com
        public List GetAccounts(List users)       
 {            List accounts = new List();
             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;        }

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

3 改进的方式---LINQ真的来了

LIQN来了,就不要吝啬自己的武器,对于相同的代码需求,优雅和简洁永远是值得追求的感觉,所以值得看似经典的代码,其实还可以更好:

// Release : code10, 2009/05/06 
// Author  : Anytao, http://www.51cto.com 
 public List GetAccounts(List users)     
   {  var result = from item in users
             select new Account  
          {      ID = item.ID,    
Name = item.FirstName + item.SecondName,
    Age = item.Age   };  
   return result.ToList();        }

改善就这么一点点,以LINQ方式实现的“智能”转换,看起来更美,不是吗。

4 结论

LINQ已经来了,你还等什么。是的,进步只有一点点,作为开发故事中的小小一笔,但是我觉得值得书写。当然,这只是LINQ应用的小小示例,同时foreach作为最重要的循环手段,仍然有着不可替代的作用,不容忽视。

【编辑推荐】

  1. C#中foreach基础使用方法
  2. 浅谈LINQ如何插入删除和更新数据库记录备注
  3. 使用LINQ查询非泛型类型

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...