C#需要存储一个解析后的SQL Server表,使用datatable或者list

Posted

技术标签:

【中文标题】C#需要存储一个解析后的SQL Server表,使用datatable或者list【英文标题】:C# need to store a parsed version of SQL Server table, use datatable or list 【发布时间】:2021-02-26 19:58:59 【问题描述】:

我是 C# 新手。我知道数据表对于读取整个 SQL 表并将数据输出到 griddataview 非常有效。但是,在将数据存储到我的 griddataview 之前,我需要做一些解析。我正在考虑逐行阅读表格并在适用时对数据进行分组。数据表或列表是否更适用于我的情况?

ORIGINAL TABLE                    PARSED TABLE I need to pass to datagridview
Name    Workdate                  Name     M T W TH F SAT SUN
Nicole     WED                    Nicole   Y   Y  Y
Nicole     THR                    Jason      Y
Nicole     MON
Jason      Tue

【问题讨论】:

Datatable 或 List 并不真正相关,因为无论如何您都需要转换数据。如果您不对数据执行 CRUD,则使用 DataTable 的效率会降低,因为它具有很多您不需要的更改跟踪功能。 @Crowcoder 我正在做 CRUD,但每次都需要从原始表格格式转换为我的格式。 我不明白您将如何更改该网格并将它们发送回数据库,而无需取消旋转它的中间步骤。 我在 7 年前写了一篇文章,向您展示如何枢轴客户端:codeproject.com/Articles/796651/… @JesúsLópez 感谢您的提示。我还可以编写一个存储过程来透视服务器端,而不是在 C# 中执行它,服务器端会更好吗? 【参考方案1】:

尝试以下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace ConsoleApplication1

    class Program
    
        static void Main(string[] args)
        
            Dictionary<string, string> dict = new Dictionary<string, string>() 
                "MON", "M","TUE", "T","WED", "W","THR", "TH","FRI", "F","SAT", "SAT","SUN", "SUN";
            DataTable dt = new DataTable();
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Workdate", typeof(string));
            dt.Rows.Add(new object[]  "Nicole", "WED" );
            dt.Rows.Add(new object[]  "Nicole", "THR" );
            dt.Rows.Add(new object[]  "Nicole", "MON" );
            dt.Rows.Add(new object[]  "Jason", "TUE" );

            DataTable pivot = new DataTable();
            pivot.Columns.Add("Name",typeof(string));
            DataColumn[] columns = dict.Select(x => new DataColumn(x.Value, typeof(string))).ToArray();
            pivot.Columns.AddRange(columns);

            var people = dt.AsEnumerable().GroupBy(x => x.Field<string>("Name")).ToArray();
            foreach (var person in people)
            
                DataRow pivotRow = pivot.Rows.Add();
                pivotRow["Name"] = person.Key;
                foreach (DataRow row in person)
                
                    string day = row.Field<string>("Workdate");
                    pivotRow[dict[day]] = "Y";
                 
                
            
        
    

【讨论】:

以上是关于C#需要存储一个解析后的SQL Server表,使用datatable或者list的主要内容,如果未能解决你的问题,请参考以下文章

C# 解析 SQL 语句以查找存储过程中使用的所有 INSERT/UPDATE/DELETE 表

SQL Server存储过程中使用表值作为输入参数示例

如何使用 c# 监控 SQL Server 表更改?

如何使用 c# 监控 SQL Server 表更改?

如何让 SQL Server 表存储一个列表?

创建触发器后的 SQL Server