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的更多相关文章

  1. 关于c#在DataTable中根据条件删除某一行

    我们经常会将数据源放在DataTable里面,但是有时候也需要移除不想要的行,下面的代码告诉你们 DataTable dts:                DataRow[] foundRow;   ...

  2. 怎样简单灵活地将DataTable中的数据赋值给model

    最近在做的一个项目中,有13个方法都需要用到同一种处理方式:通过SQL语句从数据库获取一条指定的数据,并将该数据中的每个值都赋值给一个model,再将这个model中的数据通过微信发送出去.每个方法都 ...

  3. C#中DataTable中的Compute方法使用收集

    原文: C#中DataTable中的Compute方法使用收集 Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详 ...

  4. 如何删除datatable中的一行数据

    在C#中,如果要删除DataTable中的某一行,大约有以下几种办法: 1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(ind ...

  5. C#把DataTable中数据一次插入数据库的方法

    现在实际的情况是这样的: 客户有一台打卡机,员工打卡的信息全部储存在打卡机的Access数据库里面,现在客户引入了一种新的管理系统,需要将Access数据库中的打卡数据同步到SQL Server数据库 ...

  6. 去除DataTable中的重复数据

    有时需要从DataTable中抽取Distinct数据,遍历比较费劲,C#.NET中其实有更易用的方法,如下: string[] columnArray = { "columnName1&q ...

  7. NPOI操作Excel导入DataTable中

    using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.Data; using System.IO; using NPOI.X ...

  8. C#中的Linq to Xml详解

    这篇文章主要介绍了C#中的Linq to Xml详解,本文给出转换步骤以及大量实例,讲解了生成xml.查询并修改xml.监听xml事件.处理xml流等内容,需要的朋友可以参考下 一.生成Xml 为了能 ...

  9. 在DataTable中执行DataTable.Select("条件")返回DataTable;

    转:http://blog.csdn.net/hcf_force/article/details/7779062 1.在DataTable中执行DataTable.Select("条件&qu ...

随机推荐

  1. JQuery事件绑定bind、live、on、trigger

    one 作用:只触发一次,并在触发后失效,触发时会产生时间冒泡. 语法:$(selector).one(event,data,function) 例子: $(item).one("click ...

  2. 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 ...

  3. RestSharp - Ignore SSL errors

    项目启动时,添加下面代码: 项目启动时,添加 public App() { ServicePointManager.ServerCertificateValidationCallback += (se ...

  4. linux非root用户安装4.0.14版本redis

    先到官网https://redis.io/download下安装包,现在最新是5.0.5版本,可惜点击下载后被windows禁了,那就下4版本的,往下看Other versions的Old(4.0), ...

  5. 泡泡一分钟:LandmarkBoost: Efficient Visual Context Classifiers for Robust Localization

    Marcin Dymczyk, Igor Gilitschenski, Juan Nieto, Simon Lynen, Bernhard Zeis, and Roland Siegwart Land ...

  6. Python高级笔记(七)魔法属性

    1. 私有属性 名字重整 print(Test.__dict__) {'__weakref__': <attribute '__weakref__' of 'Test' objects>, ...

  7. hadoop记录-MapReduce之如何处理失败的task(转载)

    1.1作业某个任务阻塞了,长时间占用资源不释放 1.2在MapTask任务运行完毕,ReduceTask运行过程中,某个MapTask节点挂了,或者某个MapTask结果存放的那磁盘坏掉了 在Task ...

  8. 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 ...

  9. CentOS8安装docker

    参考:https://www.cnblogs.com/ding2016/p/11592999.html 一,安装环境查看 二,下载docker-ce的repo curl https://downloa ...

  10. node不要使用最新版本,使用LTS版本

    错误现象 const { Math, Object, Reflect } = primordials; 原因 使用了最新的node版本 解决 使用稳定版本,参考官网说明,目前10.x的版本是稳定版本( ...