C#在DataTable中使用LINQ
LINQ 查询适用于实现的数据源 IEnumerable<T>接口或System.Query.IQueryable接口。
DataTable类默认是没有实现以上接口的。
所以要在DataTable中使用LINQ查询,需要调用一下AsEnumerable方法,返回一个EnumerableRowCollection<DataRow>集合。
这样我们就可以在DataTable中使用LINQ查询了
首先创建测试数据
private static DataTable GetStuTable()
{ int[] id = { , , , , , , };
string[] name = {"Tom","Jack","HelloWorld","Visual Studio","Gril","Timmy","Geo" };
DataTable table = new DataTable("Student");
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Name", typeof(string)); for(int i = ;i< id.Length;i++)
{
table.Rows.Add(new object[] { id[i],name[i]});
} return table;
}
1、使用LINQ对DataTable进行排序
DataTable dt = GetStuTable();
var students = dt.AsEnumerable();
//排序
var result = students.OrderBy(x => x.Field<int>("ID"));
//输出
Console.WriteLine("ID" + "\t" + "Name");
foreach (DataRow row in result)
{
Console.WriteLine(row["ID"].ToString() + "\t" + row["Name"].ToString());
}
运行结果如下

2、将LINQ查询结果保存为DataTable
这里只要调用DataTableExtensions. CopyToDataTable< T>方法就行了。(需要引用System.Data.DataSetExtensions.dll程序集)
static void Main(string[] args)
{
DataTable dt = GetStuTable(); var students = dt.AsEnumerable(); DataTable tempDataTable = students.OrderByDescending(x => x.Field<int>("ID")).CopyToDataTable<DataRow>(); for (int i = ; i < tempDataTable.Columns.Count; i++)
{
Console.Write(tempDataTable.Columns[i].Caption + "\t");
} Console.WriteLine();
for (int i = ; i < tempDataTable.Rows.Count; i++)
{
for (int j = ; j < tempDataTable.Columns.Count; j++)
{
Console.Write(tempDataTable.Rows[i][j].ToString() + "\t");
}
Console.WriteLine();
}
}
运行结果如下

3、转换为List集合
针对示例数据,创建相应的数据结构
public class Student
{
public string ID { get; set; }
public string Name { get; set; }
}
转换为List集合
static void Main(string[] args)
{
DataTable dt = GetStuTable(); var students = dt.AsEnumerable(); List<Student> list = students.Select
(
x=> new Student
{
ID = x.Field<int>("ID"),
Name = x.Field<string>("Name")
}
).ToList(); foreach (var item in list)
{
Console.WriteLine(item.ID + "\t" + item.Name);
}
}
运行结果

C#在DataTable中使用LINQ的更多相关文章
- 关于c#在DataTable中根据条件删除某一行
我们经常会将数据源放在DataTable里面,但是有时候也需要移除不想要的行,下面的代码告诉你们 DataTable dts: DataRow[] foundRow; ...
- 怎样简单灵活地将DataTable中的数据赋值给model
最近在做的一个项目中,有13个方法都需要用到同一种处理方式:通过SQL语句从数据库获取一条指定的数据,并将该数据中的每个值都赋值给一个model,再将这个model中的数据通过微信发送出去.每个方法都 ...
- C#中DataTable中的Compute方法使用收集
原文: C#中DataTable中的Compute方法使用收集 Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详 ...
- 如何删除datatable中的一行数据
在C#中,如果要删除DataTable中的某一行,大约有以下几种办法: 1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(ind ...
- C#把DataTable中数据一次插入数据库的方法
现在实际的情况是这样的: 客户有一台打卡机,员工打卡的信息全部储存在打卡机的Access数据库里面,现在客户引入了一种新的管理系统,需要将Access数据库中的打卡数据同步到SQL Server数据库 ...
- 去除DataTable中的重复数据
有时需要从DataTable中抽取Distinct数据,遍历比较费劲,C#.NET中其实有更易用的方法,如下: string[] columnArray = { "columnName1&q ...
- NPOI操作Excel导入DataTable中
using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.Data; using System.IO; using NPOI.X ...
- C#中的Linq to Xml详解
这篇文章主要介绍了C#中的Linq to Xml详解,本文给出转换步骤以及大量实例,讲解了生成xml.查询并修改xml.监听xml事件.处理xml流等内容,需要的朋友可以参考下 一.生成Xml 为了能 ...
- 在DataTable中执行DataTable.Select("条件")返回DataTable;
转:http://blog.csdn.net/hcf_force/article/details/7779062 1.在DataTable中执行DataTable.Select("条件&qu ...
随机推荐
- Javascript事件派发-dispatchEvent
事件派发的作用: 1.派发数据,将一个封闭模块中的数据传递给另一个封闭模块.2.事件完成了较为复杂的解耦. 事件和回调函数不同在于: 1.事件可以在任意地方去获取,而回调函数只能在一个地方存在,如果需 ...
- ubuntu下如何开机自动执行自定义脚本?
答: 将自定义脚本(假设自定义的脚本绝对路径为~/start_test.sh)添加到/etc/init.d/目录下,并更新系统启动项,命令如下: sudo cp ~/start_test.sh /et ...
- kotlin单个文件及文件夹复制例子
最近学习kotlin,把java中的单个文件及包含文件夹的文件 复制操作改写为kotlin的代码,主要熟悉kotlin文件操作以及递归调用操作方法 演示代码如下: package com.exam.f ...
- ubuntu2 setting
luo@luo-ThinkPad-W540:research$ conda create -n tf2019 python=3.6Solving environment: done ==> WA ...
- 123457123456#2#----com.ppGame.XueYingYu76--前拼后广--儿童英语_pp
com.ppGame.XueYingYu76--前拼后广--儿童英语_pp
- Django自定义用户认证系统之自定义用户模型
参考文档:http://python.usyiyi.cn/django/topics/auth/customizing.html Django 自带的认证系统足够应付大多数情况,但你或许不打算使用现成 ...
- Python - Django - 添加首页尾页上一页下一页
添加首页和尾页: views.py: from django.shortcuts import render from app01 import models def book_list(reques ...
- [Log4j使用教程] JavaSE/JavaEE/SpringMVC中使用Log4j
要想使用Log4j, 首先需要下载到Log4j的jar, Download: http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.17/log ...
- 网络编程之Reactor 模式
基本的架构是 epoll+线程池. 这篇博文主要从以下几个方面进行阐述: (1)reactor模式的一个介绍:(只要是我的理解) (2)关于线程池的说明. (3)如何将epoll + 池结合起来实现一 ...
- Union All/Union/Intersect操作
Union All/Union/Intersect操作 适用场景:对两个集合的处理,例如追加.合并.取相同项.相交项等等. Concat(连接) 说明:连接不同的集合,不会自动过滤相同项:延迟. 1. ...