LINQ 查询适用于实现的数据源 IEnumerable<T>接口或System.Query.IQueryable接口。

DataTable类默认是没有实现以上接口的。

所以要在DataTable中使用LINQ查询,需要调用一下AsEnumerable方法,返回一个EnumerableRowCollection<DataRow>集合。

这样我们就可以在DataTable中使用LINQ查询了

首先创建测试数据

 1 private static DataTable GetStuTable()
 2         {
 3
 4             int[] id = { 4, 5, 1, 3, 2, 7, 6 };
 5             string[] name = {"Tom","Jack","HelloWorld","Visual Studio","Gril","Timmy","Geo" };
 6             DataTable table = new DataTable("Student");
 7             table.Columns.Add("ID", typeof(int));
 8             table.Columns.Add("Name", typeof(string));
 9
10             for(int i = 0;i< id.Length;i++)
11             {
12                 table.Rows.Add(new object[] { id[i],name[i]});
13             }
14
15             return table;
16         }

1、使用LINQ对DataTable进行排序

 1 DataTable dt = GetNumbersTable();
 2
 3             var students = dt.AsEnumerable();
 4
 5             //排序
 6             var result = students.OrderBy(x => x.Field<int>("ID"));
 7
 8             //输出
 9             Console.WriteLine("ID" + "\t" + "Name");
10             foreach (DataRow row in result)
11             {
12                 Console.WriteLine(row["ID"].ToString() + "\t" + row["Name"].ToString());
13             }

运行结果如下

 2、将LINQ查询结果保存为DataTable

这里只要调用DataTableExtensions. CopyToDataTable< T>方法就行了。(需要引用System.Data.DataSetExtensions.dll程序集)

 1 static void Main(string[] args)
 2         {
 3             DataTable dt = GetNumbersTable();
 4
 5             var students = dt.AsEnumerable();
 6
 7             DataTable tempDataTable = students.OrderByDescending(x => x.Field<int>("ID")).CopyToDataTable<DataRow>();
 8
 9             for (int i = 0; i < tempDataTable.Columns.Count; i++)
10             {
11                 Console.Write(tempDataTable.Columns[i].Caption + "\t");
12             }
13
14             Console.WriteLine();
15             for (int i = 0; i < tempDataTable.Rows.Count; i++)
16             {
17                 for (int j = 0; j < tempDataTable.Columns.Count; j++)
18                 {
19                     Console.Write(tempDataTable.Rows[i][j].ToString() + "\t");
20                 }
21                 Console.WriteLine();
22             }
23         }

运行结果如下

3、转换为List集合

针对示例数据,创建相应的数据结构

1 public class Student
2     {
3         public string ID { get; set; }
4         public string Name { get; set; }
5     }

转换为List集合

 1  static void Main(string[] args)
 2         {
 3             DataTable dt = GetNumbersTable();
 4
 5             var students = dt.AsEnumerable();
 6
 7             List<Student> list = students.Select
 8                 (
 9                     x=> new Student
10                     {
11                         ID = x.Field<int>("ID"),
12                         Name = x.Field<string>("Name")
13                     }
14                 ).ToList();
15
16             foreach (var item in list)
17             {
18                 Console.WriteLine(item.ID + "\t" + item.Name);
19             }
20         }

运行结果

转载于:https://www.cnblogs.com/zhaotianff/p/9248157.html

C#在DataTable中使用LINQ相关推荐

  1. datatable中使用linq的条件或_C# 10. LINQ 的三种查询语句写法

    前言: LINQ(语言集成查询)是 C#编程语言中的一部分.它在.NET Framework 3.5 和 C#3.0 被引入,在 System.Linq 命名空间中使用.LINQ 为我们提供了通用的查 ...

  2. 获取DataTable中的某一列及增加一行数据

    C#中获取DataTable中的某一列数据,存入List<T> Field 需要用到System.Data.DataSetExtensions using System; using Sy ...

  3. 在DataTable中更新、删除数据

    在DataTable中选择记录 /*在DataTable中选择记录*//* 向DataTable中插入记录如上,更新和删除如下:* ----但是在更新和删除前,首先要找出要更新和删除的记录.* 一种方 ...

  4. DataTable中数据记录的统计

    DataTable中数据记录的统计 我们在使用Sql Server这些数据库时,可以轻松的通过Sum.Aver.Count等统计出相关结果,那么,在已经把数据检索出来的DataSet(DataTabl ...

  5. 在DataTable中创建计算列

    我们知道DataTable是内存中的一个表,可以用DataColumn和DataRow来构造一个DataTable,并且用DataColumn的Expression属性来创建计算列. (1)创建计算列 ...

  6. 关于在DataTable中执行DataTable.Select(条件)返回DataTable的解决方法

    在实际编程工程中,常常遇到这样的情况:DataTable并不是数据库中的,或者DataTable尚未写到数据库,或者从数据库中读出的DataTable已经在本地被改动,又没有写回数据库(可能还要作其他 ...

  7. 比较2个DataTable中的内容是否相同的方法

    DataTable可以通过RowStatus来判断状态是否发生了改变.但是有些时候我们希望在行状态即使为Modified的情况下也不要提示内容发生了变化,这个时候我们可能就需要自己写方法去判断了.比如 ...

  8. 向DataTable中添加自定义的行

    [标题]向DataTable中添加自定义行 [内容] 向DataTable中添加自定义行,然后绑定到DropDownList控件中,并且默认行为控件的第一行 如果表结构如下:              ...

  9. 将DataTable中的数据导入到数据库中

    上次在根据excel的文件的路径提取其中表的数据到DataSet中 一文中介绍了将Excel文件中的数据读取到DataSet中的方法,今天我来介绍下我曾经在项目中用到的一个将DataTable中的数据 ...

最新文章

  1. 地理投影展开(近似多边形体)
  2. Apache ZooKeeper - 选举Leader源码流程深度解析
  3. Python3 正则表达式特殊符号及用法(详细列表)
  4. Spring容器中获取Bean实例的七种方式(附实战源码)
  5. Pixhawk-串级pid介绍
  6. 阿帕奇跨域_阿帕奇骆驼备忘单
  7. ffmpeg 解码音频(aac、mp3)输出pcm文件
  8. 关于ASCII字符的那些事儿
  9. 懂得一些基本常识,就不会被《非酒精類致命飲料》或者叫做《我一辈子都不再喝可口可乐》的这篇文章所蒙蔽...
  10. 转载 Assert断言知识
  11. 用邮件备份手机数据是必然趋势
  12. Redis入门整合springboot
  13. 遥感影像预处理流程及基本概念介绍(辐射校正、辐射定标、大气校正、正射校正等)
  14. 调试sim800L模块
  15. ubuntu下将eth3改为eth0及HWaddr的修改
  16. 设计师的色彩理论,你知道不同色彩的秘密吗?
  17. js 根据链接生成二维码
  18. html 格式化金额显示
  19. 家用计算机长期不关机的后果,长时间不关机对电脑有什么影响
  20. 第十二届蓝桥杯省赛 C/C++大学B组 试题G:砝码称重

热门文章

  1. 清华大学研究称国内多城市饮用水含高浓度PFAS
  2. html自定义radio样式,用纯CSS 自定义radio checkbox 样式
  3. android下拉刷新动画效果代码_vue项目实录:下拉刷新组件的开发及slot的使用
  4. 010_Post请求中文乱码
  5. 096_JavaScript事件
  6. 字符串html在线互转,将string 的字符串转换为HTML的两种方法
  7. linux导出并追加到文件,linux – 如何将awk结果输出到文件
  8. 实用金属材料手册_实用电工材料手册
  9. 这是我看过最好的Java编程入门视频教程!
  10. dr. unarchiver_P160 四季可穿,数仙女尽折腰!醉高版本Dr马丁靴女2020秋冬新款牛筋底1460英伦风8孔系带复古机车军靴真皮短靴马丁靴...