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 ...
随机推荐
- JQuery事件绑定bind、live、on、trigger
one 作用:只触发一次,并在触发后失效,触发时会产生时间冒泡. 语法:$(selector).one(event,data,function) 例子: $(item).one("click ...
- MYSQL Packet for query is too large (12054240 > 4194304). You can change this value on the server by setting the max_allowed_packet' variable.
MYSQL Packet for query is too large (12054240 > 4194304). You can change this value on the server ...
- RestSharp - Ignore SSL errors
项目启动时,添加下面代码: 项目启动时,添加 public App() { ServicePointManager.ServerCertificateValidationCallback += (se ...
- linux非root用户安装4.0.14版本redis
先到官网https://redis.io/download下安装包,现在最新是5.0.5版本,可惜点击下载后被windows禁了,那就下4版本的,往下看Other versions的Old(4.0), ...
- 泡泡一分钟:LandmarkBoost: Efficient Visual Context Classifiers for Robust Localization
Marcin Dymczyk, Igor Gilitschenski, Juan Nieto, Simon Lynen, Bernhard Zeis, and Roland Siegwart Land ...
- Python高级笔记(七)魔法属性
1. 私有属性 名字重整 print(Test.__dict__) {'__weakref__': <attribute '__weakref__' of 'Test' objects>, ...
- hadoop记录-MapReduce之如何处理失败的task(转载)
1.1作业某个任务阻塞了,长时间占用资源不释放 1.2在MapTask任务运行完毕,ReduceTask运行过程中,某个MapTask节点挂了,或者某个MapTask结果存放的那磁盘坏掉了 在Task ...
- LeetCode_345. Reverse Vowels of a String
345. Reverse Vowels of a String Easy Write a function that takes a string as input and reverse only ...
- CentOS8安装docker
参考:https://www.cnblogs.com/ding2016/p/11592999.html 一,安装环境查看 二,下载docker-ce的repo curl https://downloa ...
- node不要使用最新版本,使用LTS版本
错误现象 const { Math, Object, Reflect } = primordials; 原因 使用了最新的node版本 解决 使用稳定版本,参考官网说明,目前10.x的版本是稳定版本( ...