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 ...
随机推荐
- 空指针异常 自动拆箱 防止 NPE,是程序员的基本修养 本手册明确防止 NPE 是调用者的责任。
空指针异常 空指针异常是指java中的异常类. 中文名 空指针异常 外文名 NullPointerException 当应用程序试图在需要对象的地方使用 null 时,抛出该异常.这种情况包括: ...
- 001 安装mysql
在安装docker之后,安装一个mysql的容器试试手.可以参考违章: URL: https://www.cnblogs.com/limingxie/p/8655457.html
- Tomcat redis session manager connect redis show: ERR Client sent AUTH, but no password is set
解决问题redis问题:ERR Client sent AUTH, but no password is set - 东篱煮酒 - 博客园https://www.cnblogs.com/niepeis ...
- git commit之后,撤销 commit
写完代码后,我们一般这样 git add . //添加所有文件 git commit -m "本功能全部完成" 执行完commit后,想撤回commit,怎么办? 可以执行如下命令 ...
- openresty开发系列18--lua的字符串string操作
openresty开发系列18--lua的字符串string操作 string的相关操作 1)string.upper(s)接收一个字符串 s,返回一个把所有小写字母变成大写字母的字符串.print( ...
- java-mybaits-015-mybatis逆向工程最佳实践【基础mybatis-generator、tk.mybatis、mubatis-plus】
一.概述 三款框架的功能对比 Mybatis-generator 通用Mapper Mybatis-Plus 代码生成器 支持自动生成Model,Mapper,Mapper XML文件 生成方式不够灵 ...
- o2s【我】
//预处理对象转String方法 private String o2s(Object o) { if(o!=null&&!"".equals(o)&& ...
- 译文:A Robust and Modular Multi-Sensor Fusion ApproachApplied to MAV Navigation
A Robust and Modular Multi-Sensor Fusion ApproachApplied to MAV Navigation 众所周知,将来自多个传感器的信息融合用于机器人导航 ...
- Spring cloud微服务安全实战-3-5 API安全机制之认证(2)
基于Http协议的认证方式有很多.本节我们只讲一个最简单的HttpBasic认证.聪明就可以看出来,这是一个最基础的认证,好处是简单方便,所有的主流浏览器都支持,问题就是并不是非常安全的,但是帮我们大 ...
- pca数学原理(转)
PCA的数学原理 前言 数据的向量表示及降维问题 向量的表示及基变换 内积与投影 基 基变换的矩阵表示 协方差矩阵及优化目标 方差 协方差 协方差矩阵 协方差矩阵对角化 算法及实例 PCA算法 实例 ...