C# DataTable使用Linq查询详解

前奏- C# 对DataTable进行查询

C# 可以对 DataTable 进行查询。在 .NET 框架中,DataTable 类提供了几种方法来查询数据,包括 Select 方法和 AsEnumerable 扩展方法(在 System.Data.DataSetExtensions 命名空间中)。

使用 Select 方法

cs 复制代码
DataTable table = new DataTable();

// 假设 DataTable 已经被填充了数据

// 使用 Select 方法进行查询
DataRow[] rows = table.Select("Column1 = 'SomeValue'");

foreach (DataRow row in rows)
{
    // 处理每一行
}

使用 LINQ (Language Integrated Query)

cs 复制代码
using System.Data;
using System.Linq;

DataTable table = new DataTable();

// 假设 DataTable 已经被填充了数据

// 使用 LINQ 进行查询
var query = from row in table.AsEnumerable()
            where row.Field<string>("Column1") == "SomeValue"
            select row;

foreach (var row in query)
{
    // 处理每一行
}

或者使用方法语法:

cs 复制代码
var query = table.AsEnumerable()
                 .Where(row => row.Field<string>("Column1") == "SomeValue");

foreach (var row in query)
{
    // 处理每一行
}

注意

使用 LINQ 查询 DataTable,性能可能会比直接使用 Select 方法稍慢,因为 LINQ 查询会被转换为 Select 方法的调用,并且在某些情况下,LINQ 查询可能会涉及到额外的内存分配。然而,LINQ 提供了更灵活和强大的查询能力,并且代码通常更易于阅读和维护。

DataTable使用Linq查询详解

基础概念

在开始之前,你需要了解几个基本概念:

  • DataTable.AsEnumerable(): 这个方法将 DataTable 转换为 IEnumerable<DataRow>,使其可以使用 LINQ 查询。
  • DataRow.Field<T>(string columnName): 这个扩展方法用于安全地获取 DataRow 中指定列的值,并转换为指定的类型。

基本查询步骤

以下是使用 LINQ 查询 DataTable 的基本步骤:

  1. 转换 DataTable : 使用 AsEnumerable()DataTable 转换为可查询的形式。
  2. 定义查询 : 使用 LINQ 方法(如 Where, Select, OrderBy 等)定义查询。
  3. 执行查询 : 使用 foreach 循环或其他迭代方法来执行查询并处理结果。

示例

假设我们有一个 DataTable,其中包含以下列:Id, Name, Age

1. 筛选数据

筛选年龄大于 30 的记录:

cs 复制代码
using System;
using System.Data;
using System.Linq;

DataTable table = new DataTable();
// 假设 DataTable 已经被填充了数据

var filteredRows = table.AsEnumerable()
                        .Where(row => row.Field<int>("Age") > 30);

foreach (var row in filteredRows)
{
    Console.WriteLine($"Id: {row["Id"]}, Name: {row["Name"]}, Age: {row["Age"]}");
}

2. 排序数据

按年龄升序排序:

cs 复制代码
var sortedRows = table.AsEnumerable()
                      .OrderBy(row => row.Field<int>("Age"));

foreach (var row in sortedRows)
{
    Console.WriteLine($"Id: {row["Id"]}, Name: {row["Name"]}, Age: {row["Age"]}");
}

3. 选择特定列

选择 NameAge 列:

cs 复制代码
var selectedColumns = table.AsEnumerable()
                           .Select(row => new { Name = row.Field<string>("Name"), Age = row.Field<int>("Age") });

foreach (var item in selectedColumns)
{
    Console.WriteLine($"Name: {item.Name}, Age: {item.Age}");
}

4. 聚合操作

计算所有人的年龄总和:

cs 复制代码
var totalAge = table.AsEnumerable()
                    .Sum(row => row.Field<int>("Age"));

Console.WriteLine($"Total Age: {totalAge}");

5. 分组操作

按年龄分组并计算每个年龄组的人数:

cs 复制代码
var groupedByAge = table.AsEnumerable()
                        .GroupBy(row => row.Field<int>("Age"))
                        .Select(group => new { Age = group.Key, Count = group.Count() });

foreach (var group in groupedByAge)
{
    Console.WriteLine($"Age: {group.Age}, Count: {group.Count}");
}
相关推荐
豆豆14 分钟前
如何选择企业网站模版来搭建网站?
服务器·开发语言·前端·php·软件构建
吃葡萄不图葡萄皮17 分钟前
3D绘制动态爱心Matlab
开发语言·matlab
Crazy Struggle17 分钟前
.NET 8 强大功能 IHostedService 与 BackgroundService 实战
c#·.net·.net core
星晨羽25 分钟前
esayExcel根据模板导出包含图片
java·开发语言·windows
Say Bay To The Bugs26 分钟前
EasyExcel 使用多线程按顺序导出数据
开发语言·excel
机器懒得学习27 分钟前
Python & PyQt5 实现 .his 文件批量转 Excel 工具
开发语言·python·excel
fs哆哆31 分钟前
C#编程:优化【性别和成绩名次】均衡分班
开发语言·c#
可靠百灵鸟34 分钟前
Python 操作 Excel 表格从简单到高级用法
开发语言·python·excel
AI原吾34 分钟前
探索MoviePy:Python视频编辑的瑞士军刀
开发语言·python·音视频·moviepy
数据小小爬虫1 小时前
使用Java爬虫获取淘宝商品类目API返回值
java·开发语言