Linq To DataTable学习笔记

开发 后端
这里介绍Linq To DataTable,包括介绍Linq已经让我们感觉不到Query的难点, 它让我们很容易的实现高难度的Query。

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;  

【编辑推荐】

  1. LINQ to SQL查询分析
  2. LINQ查询架构简单介绍
  3. LINQ to SQL映射关系概述
  4. LINQ To SQL对象模型浅析
  5. LINQ to SQL映射列描述
责任编辑:佚名 来源: 博客园
相关推荐

2009-09-08 17:57:54

LINQ to Dat

2009-09-16 13:02:12

LINQ查询子句

2009-09-17 16:20:43

Linq to sql

2009-09-08 09:12:12

LINQ构建框架设计

2009-09-17 13:54:26

LINQ to XML

2010-05-11 09:09:13

DataTableLINQ

2009-09-10 17:38:04

LINQ技术

2009-09-11 12:08:09

Linq to SQL

2009-09-07 17:09:45

Linq To Sql

2009-09-08 15:27:08

Linq Select

2009-09-17 13:38:42

LINQ to XML

2009-09-16 17:13:54

学习Linq

2009-09-17 15:51:39

Linq to sql

2009-09-10 13:54:27

LINQ语法

2009-09-14 17:10:57

LINQ模糊查询

2009-09-17 08:47:00

Linq查询

2009-09-14 18:19:49

LINQ模糊查询

2009-09-15 16:26:46

Linq排序

2009-09-14 20:17:05

并行LINQ

2009-09-14 16:00:51

LINQ基本操作LINQ
点赞
收藏

51CTO技术栈公众号