登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

学无止境

一点积累,与大家分享

 
 
 

日志

 
 

Linq To DataTable学习笔记  

2010-07-09 09:16:39|  分类: .net技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Linq 有很多值得学习的地方,这里我们主要介绍Linq To DataTable,包括介绍DataTable类型等方面。

Linq To DataTable

Linq已经让我们感觉不到Query的难点, 它让我们很容易的实现高难度的Query。 或许剩下的问题, 也许是很简单的问题就是如何保存这些Query结果?

  1. var _result = DAL.Utility.SelectAll<Customer>();  
  2. var _filter =  
  3. from q in _result  
  4. where q.CustomerID.StartsWith("B")  
  5. select new  
  6. {  
  7. q.CustomerID,  
  8. q.ContactName,  
  9. q.CompanyName  
  10. }; 

_result 是搜索所有Customer的结果,_filter 是 _result 中 CustomerID 以“B”开始的{CustomerID , ContactName, CompanyName} 集合,但是这个匿名类型就没办法作为变量 return 给另外一个方法调用。

可能把这个{CustomerID , ContactName, CompanyName} 集合反射到一个DataTable类型是比较符合一般数据库需求的, 或许说这也是某些旧系统轻松插上Linq翅膀的一种方案。

下面给出Linq To DataTable的方法(某种意义上是一样的): 

  1. public static System.Data.DataTable LinqToDataTable<T>(IEnumerable<T> data)  
  2. {  
  3. var dt = new System.Data.DataTable();  
  4. var ps = typeof(T).GetProperties().ToList();  
  5. ps.ForEach(p => dt.Columns.Add(p.Name, p.PropertyType));  
  6.  
  7. foreach (T t in data)  
  8. {  
  9. var dr = dt.NewRow();  
  10. var vs = from p in ps select p.GetValue(t, null);  
  11. var ls = vs.ToList();  
  12. int i = 0;  
  13. ls.ForEach(c => dr[i++] = c);  
  14. dt.Rows.Add(dr);  
  15. }  
  16. return dt;  
  17. }  
  18.  
  19. public static System.Data.DataTable ToDataTable<T>(IEnumerable<T> data)  
  20. {  
  21. var dt = new System.Data.DataTable();  
  22. var psSystem.ComponentModel.TypeDescriptor.GetProperties(typeof(T));  
  23. foreach (System.ComponentModel.PropertyDescriptor dp in ps )  
  24. dt.Columns.Add(dp.Name, dp.PropertyType);  
  25. foreach (T t in data)  
  26. {  
  27. var dr = dt.NewRow();  
  28. foreach (System.ComponentModel.PropertyDescriptor dp in ps)  
  29. dr[dp.Name] = dp.GetValue(t);  
  30. dt.Rows.Add(dr);  
  31. }  
  32. return dt;  
  评论这张
 
阅读(1199)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018