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的主要内容,如果未能解决你的问题,请参考以下文章