首页 > 其他分享 >DataTable的Extension

DataTable的Extension

时间:2024-09-23 22:23:49浏览次数:1  
标签:Console Extension System dataTable ex WriteLine DataTable

# DataTableExtensions\App\App.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="DataTablePrettyPrinter" Version="0.2.0" />
  </ItemGroup>

</Project>

DataTableExtensions\App\DataTableExtensions.cs


using System;
using System.Data;
using System.Data.Common;
using System.Reflection.Metadata.Ecma335;
using System.Security.Cryptography;

namespace Extensions;

public static class DataTableExtension
{
    public static bool IsEmpty(this DataTable dt)
    {
        if (dt.Rows.Count == 0)
        {
            return true;
        }
        return false;
    }

    public static DataTable GetDerivedTable(
        this DataTable parentDt,
        int rowStartIdx,
        int rowLength,
        int colStartIdx,
        int colLength
    )
    {
        // 创建一个新的 DataTable,只包含所需的列
        DataTable derivedTable = new DataTable();
        for (int i = 0; i < rowLength; i++)
        {
            DataRow newRow = derivedTable.NewRow();
            derivedTable.Rows.Add(newRow);
        }
        for (int i = 0; i < colLength; i++)
        {
            derivedTable.Columns.Add($"col_{i}");
        }
        // System.Console.WriteLine(derivedTable.ToPrettyPrintedString());
        // 将数据从原始 DataTable 复制到新的 DataTable
        for (int j = rowStartIdx; j < rowStartIdx + rowLength; j++)
        {
            for (int i = colStartIdx; i < colStartIdx + colLength; i++)
            {
                // System.Console.WriteLine($"{j},{i}");
                try
                {
                    derivedTable.Rows[j - rowStartIdx][i - colStartIdx] = parentDt.Rows[j][i];
                }
                catch (System.Exception ex)
                {
                    throw new IndexOutOfRangeException(
                        $"(row,col) = ({j},{i})超出datatable的索引范围:{ex.Message}"
                    );
                }
            }
        }
        return derivedTable;
    }

    public static string FirstRow(this DataRowCollection rows, string colName)
    {
        try
        {
            return rows[0][colName].ToString().Trim();
        }
        catch (System.Exception ex)
        {
            // System.Console.WriteLine(ex.Message);
            throw new Exception($"row[0][{colName}]元素不存在 : {ex.Message}");
        }
    }

    public static string FirstRow(this DataRowCollection rows, int colIdx)
    {
        try
        {
            return rows[0][colIdx].ToString().Trim();
        }
        catch (System.Exception ex)
        {
            // System.Console.WriteLine(ex.Message);
            throw new Exception($"row[0][{colIdx}]元素不存在 : {ex.Message}");
        }
    }

    public static string FirstCell(this DataTable dt)
    {
        try
        {
            return dt.Rows[0][0].ToString().Trim();
        }
        catch (Exception ex)
        {
            // System.Console.WriteLine(ex.Message);
            throw new Exception($"row[0][0]元素不存在 : {ex.Message}");
        }
    }

    public static string Get(this DataRow row, string colName)
    {
        try
        {
            return row[colName].ToString().Trim();
        }
        catch (Exception ex)
        {
            // System.Console.WriteLine(ex.Message);
            throw new Exception($"row[{colName}]元素不存在 : {ex.Message}");
        }
    }

    public static List<string> Get(this DataRow row, int count)
    {
        try
        {
            var resutls = new List<string>();
            for (int i = 0; i < count; i++)
            {
                resutls.Add(row[i].ToString());
            }
            return resutls;
        }
        catch (Exception ex)
        {
            // System.Console.WriteLine(ex.Message);
            throw new Exception($"row[]元素不存在 : {ex.Message}");
        }
    }

    static (string, dynamic) CreateTuple(List<object> list, int index)
    {
        if (index == list.Count - 1)
        {
            return (list[index].ToString(), null);
        }
        else
        {
            return (list[index].ToString(), CreateTuple(list, index + 1));
        }
    }
}

DataTableExtensions\App\Program.cs


using System;
using System.Data;
using DataTablePrettyPrinter;
using Extensions;

class Program
{
    static void Main()
    {
        DataTable dataTable = NewMethod();
        Console.WriteLine(dataTable.ToPrettyPrintedString());
        Console.WriteLine(dataTable.FirstCell());
        Console.WriteLine("----------------");
        Console.WriteLine(dataTable.Rows.FirstRow(1));
        Console.WriteLine("----------------");
        Console.WriteLine(dataTable.IsEmpty());
        Console.WriteLine("----------------");
        foreach (DataRow row in dataTable.Rows)
        {
            List<string> values = row.Get(3);
            foreach (var value in values)
            {
                Console.WriteLine(value);
            }
            Console.WriteLine("------------");
        }
    }

    private static DataTable NewMethod()
    {
        // 创建一个DataTable对象
        DataTable dataTable = new DataTable("MyDataTable");

        // 添加列
        dataTable.Columns.Add("Id", typeof(int));
        dataTable.Columns.Add("Name", typeof(string));
        dataTable.Columns.Add("Age", typeof(int));

        // 添加数据行
        DataRow row1 = dataTable.NewRow();
        row1["Id"] = 1;
        row1["Name"] = "Alice";
        row1["Age"] = 25;
        dataTable.Rows.Add(row1);

        DataRow row2 = dataTable.NewRow();
        row2["Id"] = 2;
        row2["Name"] = "Bruce";
        row2["Age"] = 30;
        dataTable.Rows.Add(row2);
        return dataTable;
    }
}

DataTableExtensions\App\run.bat

dotnet run

DataTableExtensions\DataTableExtensions.sln

DataTableExtensions\run.bat

cd App
dotnet run

DataTableExtensions\zz.bat

set "scriptPath=%cd%" 
D: && cd D:\dotnet.-script\App\bin\Debug\net8.0\ && D:\dotnet.-script\App\bin\Debug\net8.0\App.exe  "%scriptPath%"   "Question" "other"

标签:Console,Extension,System,dataTable,ex,WriteLine,DataTable
From: https://www.cnblogs.com/zhuoss/p/18428041

相关文章

  • 管理 Windows 实例的高效方法 —— 使用 WindowExtensions 类
    管理Windows实例的高效方法——使用WindowExtensions类在现代的Windows应用程序开发中,尤其是使用WPF(WindowsPresentationFoundation)时,管理多个窗口实例是一个常见的需求。为了确保应用程序的用户体验流畅且一致,开发者常常需要控制窗口的创建、显示以及位置管理。本文......
  • 水果软件21更新!Image-Line FL Studio Producer Edition v24.1.1.4285 WIN全插件版本+
    在数字音乐创作领域,FLStudio(也称为FruityLoops)一直以来都是众多音乐制作人心目中的首选工具。随着版本的不断更新迭代,FLStudioProducerEdition24.1.1.4285中文版的发布,无疑为广大的华语音乐创作者们带来了更为便捷、高效且功能强大的音乐制作体验。本文将从多个角度深入......
  • 使用 Microsoft.Extensions.ServiceDiscovery 进行服务发现并调用
    简介在现代微服务架构中,服务发现(ServiceDiscovery)是一项关键功能。它允许微服务动态地找到彼此,而无需依赖硬编码的地址。以前如果你搜.NETServiceDiscovery,大概率会搜到一大堆Eureka,Consul等的文章。现在微软为我们带来了一个官方的包:Microsoft.Extensions.ServiceDiscovery......
  • 为AppInventor2开发自己的拓展(Extension) - 拓展开发入门篇
    //为什么需要开发拓展?//AppInventor2是积木式在线安卓开发环境,利用拖拽式的方式实现代码块堆叠,从而完成相应的逻辑。上手很容易,但是由于代码块提供的功能有限,使用比较单一,在开发上有很大的局限性,但是它提供了拓展Extension特性,开放了源码,使得开发者可以根据自己的需要,自......
  • Git Extensions:一个.NET开源的 Git 图形用户界面(GUI)工具
    前言今天大姚给大家分享一个.NET开源、免费的用于管理Git存储库的独立图形用户界面(GUI)工具,它还与Windows资源管理器和 MicrosoftVisualStudio(2015/2017/2019/2022)集成:GitExtensions。Git新手指南:从基础到实践的全方位教程功能介绍图形用户界面:提供一个友好的......
  • c# 读取上传excel转换为DataTable
    varfiles=Request.Files;if(files==null||files.Count==0){returnJson(new{code=1,msg="未获取到文件"});}varfile=files[0];vardt=ReadExcelToDataTable(file.InputStream);returnJson(new{code=1,msg="已读取Excel......
  • Git Extensions:一个.NET开源的 Git 图形用户界面(GUI)工具
    前言今天大姚给大家分享一个.NET开源、免费的用于管理Git存储库的独立图形用户界面(GUI)工具,它还与Windows资源管理器和MicrosoftVisualStudio(2015/2017/2019/2022)集成:GitExtensions。Git新手指南:从基础到实践的全方位教程功能介绍图形用户界面:提供一个友好的......
  • PrimeVue DataTable 属性值解析
    primeVueDataTable组件的属性值使用DataTable属性NameTypeDefaultdescriptionvaluenull|any[]null要显示的对象数组。dataKeystring|Functionnull唯一标识数据中的记录的字段名称。rowsnumber0每页显示的行数。firstnumber0要显示的第一行的索引。totalR......
  • WPF 现代化开发教程:使用 Microsoft.Extensions.Hosting 和 CommunityToolkit.Mvvm
    介绍随着WPF应用程序的复杂性增加,使用现代化的开发工具和模式变得尤为重要。本教程将指导你如何使用Microsoft.Extensions.Hosting和CommunityToolkit.Mvvm来开发一个现代化的WPF应用程序。这些工具为开发者提供了依赖注入、应用程序生命周期管理、MVVM模式支持等功能。先决......
  • swiftUI-extension的使用
    在Swift中,extension关键字用于为现有的类、结构体、枚举或协议添加新的功能,而无需修改原始源代码。扩展可以添加新的方法、计算属性、初始化器、下标、嵌套类型和遵循协议等。以下是一些常见的extension用法示例:为类添加方法extensionString{funcreversedString()......