优雅的LinQ
来源:互联网 发布:混合矩阵切换器 编辑:程序博客网 时间:2024/05/02 10:44
1 引言
对一个List<T>转换的小小处理。首先来看看,这个List<T>转换双方的本来面目,以一个常见的User类为例而言,User类代表了Model层的实体类,其定义为:
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层的业务类,其定义为:
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>转换,我们固有思维中想到的就是循环了,所以我想都没想就实现了下面的处理过程:
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来了,就不要吝啬自己的武器,对于相同的代码需求,优雅和简洁永远是值得追求的感觉,所以值得看似经典的代码,其实还可以更好:
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作为最重要的循环手段,仍然有着不可替代的作用,不容忽视。
- 优雅的LinQ
- 打造优雅的Linq To SQL动态查询
- .NET深入解析LINQ框架(一:LINQ优雅的前奏)
- .NET深入解析LINQ框架(二:LINQ优雅的前奏)
- .NET深入解析LINQ框架(三:LINQ优雅的前奏)
- .NET深入解析LINQ框架(一:LINQ优雅的前奏)
- .NET深入解析LINQ框架(二:LINQ优雅的前奏)
- .NET深入解析LINQ框架(三:LINQ优雅的前奏)
- .NET深入解析LINQ框架(一:LINQ优雅的前奏)
- 优雅的linq润滑在复杂的业务环境中(上)
- 优雅的linq润滑在复杂的业务环境中(下)
- 优雅的长笛
- 欧洲人的优雅
- 优雅的javaScript代码
- 关于“优雅”的设计
- 残缺的优雅
- 优雅的离别
- 优雅的closesocket
- jdk 环境配量配置
- Silverlight中使用XmlReader递归读取xml文件
- 【动态规划:防卫导弹】:离散化+DP;15ms;
- struts2+jquery+ajax异步提交
- 取得 wince 剩余电量和wifi信号强度
- 优雅的LinQ
- 系统引起 磁盘被写保护
- Symbian按键处理函数:OfferKeyEventL()详解
- vc读取硬盘
- LINUX--TELNET配置
- 转一篇文章
- CWinApp::OnFileOpen
- 我要开始写博客了
- 不完全类型