zoukankan      html  css  js  c++  java
  • [开发故事]第二回:LINQ来了,先忘记foreach

    《你必须知道的.NET》网站 | Anytao技术博客 

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

    发布日期:2008.10.6 作者:Anytao
    © 2008 Anytao.com ,Anytao原创作品,转贴请注明作者和出处。

    说在,开篇之前

    你看,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;
            }

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

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

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

            // Release : code10, 2008/10/06                
            // Author  : Anytao, http://www.anytao.com
            public List<Account> GetAccounts(List<User> users)
            {
                var result = from item in users
                             select new Account
                             {
                                 ID = item.ID,
                                 Name = item.FirstName + item.SecondName,
                                 Age = item.Age
                             };
     
                return result.ToList<Account>();
            }

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

    4 结论

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

     
    特别鸣谢:Terry
     

    anytao | © 2008 Anytao.com

    2008/10/06 | 荣誉出品:http://www.cnblogs.com/anytao

    本文以“现状”提供且没有任何担保,同时也没有授予任何权利。 | This posting is provided "AS IS" with no warranties, and confers no rights.

    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    周末毒鸡汤时间
    MySQL 8.0发布,你熟悉又陌生的Hash Join?
    你可能需要的Kafka面试题与答案整理
    流程控制结构
    视图
    事务
    常用约束
    sql99语法的连接查询
    数据类型
    数据操作语句(DML)
  • 原文地址:https://www.cnblogs.com/anytao/p/anytao_devstory_02.html
Copyright © 2011-2022 走看看