C# DataTable -> 需要根据列值生成一个ID

     2023-04-12     101

关键词:

【中文标题】C# DataTable -> 需要根据列值生成一个ID【英文标题】:C# DataTable -> Need to generate an ID based on the column values 【发布时间】:2021-08-19 10:03:07 【问题描述】:
Value ID
A
A
A
B
B
C

期望的输出

Value ID
A 1
A 1
A 1
B 2
B 2
C 3

我需要根据对值列进行分组来创建 ID。所有 A 和 B 的单个 ID。

提前致谢!

【问题讨论】:

【参考方案1】:

您可以简单地使用如下循环:

for(int i = 0; i < dataTable.Rows.Count; i++) 
    switch(dataTable.Rows[i][0].ToString())
        case "A" :
            dataTable.Rows[i][1] = 1;
        break;
        case "B" :
            dataTable.Rows[i][1] = 2;
        break;
        case "C" :
            dataTable.Rows[i][1] = 3;
        break;
      // other cases
    

【讨论】:

【参考方案2】:

这里 dt 是您的数据表。使用这样的循环:

 int id = 1;
            for (int i = 0; i < dt.Rows.Count; i++)
            
                if (i == 0)
                
                    dt.Rows[i]["ID"] = id;
                    if (i != dt.Rows.Count && dt.Rows[i + 1]["Value"] != dt.Rows[i]["Value"])
                    
                        id++;
                    
                
                else
                
                    if (dt.Rows[i - 1]["Value"] == dt.Rows[i]["Value"])
                    
                        dt.Rows[i]["ID"] = id;
                    
                    else
                    
                        id = id + 1;
                        dt.Rows[i]["ID"] = id;
                    
                
            

【讨论】:

【参考方案3】:

如果值可能介于 A-Z 之间,请考虑在表单中完成以下操作,但可以在任何您想要的地方完成。

public class Replacement

    public string Value  get; set; 
    public int Index  get; set; 

表格代码

private void SetIdButton_Click(object sender, EventArgs e)

    var dataTable = MockedDataTable();
    var items = ReplacementData;

    for (int index = 0; index < dataTable.Rows.Count; index++)
    
        dataTable.Rows[index].SetField("ID",
            items.FirstOrDefault(replacement => 
                replacement.Value == dataTable.Rows[index].Field<string>("Value")).Index);
    

    foreach (DataRow row in dataTable.Rows)
    
        Console.WriteLine($"string.Join(",", row.ItemArray)");
    


private static Replacement[] ReplacementData 
    => "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    .ToCharArray().Select((value, index) => new Replacement
    
        Value = value.ToString(), 
        Index = index + 1
    )
    .ToArray();

private static DataTable MockedDataTable()

    DataTable dataTable = new DataTable();

    dataTable.Columns.Add("Value", typeof(string));
    dataTable.Columns.Add("ID", typeof(int));

    dataTable.Rows.Add("A");
    dataTable.Rows.Add("A");
    dataTable.Rows.Add("A");
    dataTable.Rows.Add("B");
    dataTable.Rows.Add("B");
    dataTable.Rows.Add("C");
    dataTable.Rows.Add("D");
    
    return dataTable;

输出

A,1
A,1
A,1
B,2
B,2
C,3
D,4

【讨论】:

如何在末尾使用空列值对 C# Datatable 进行排序

】如何在末尾使用空列值对C#Datatable进行排序【英文标题】:HowtosortC#Datatablewithemptycolumnvaluesattheend【发布时间】:2020-07-2906:46:47【问题描述】:我有一个包含1000行的C#数据表。但主要的200行有空值(多列)。过滤器会发生在这些... 查看详情

根据 C#2.0 中的列值过滤 DataTable 行

】根据C#2.0中的列值过滤DataTable行【英文标题】:FilterDataTablerowsbasedonacolumnvalueinC#2.0【发布时间】:2020-03-0614:06:49【问题描述】:我有一个包含n行/列的数据表。我想根据只有一个字符值为“*”的列过滤行。我的版本是C#2.0。如... 查看详情

如何根据列值对每一行显示复选框 - JQuery DataTable

】如何根据列值对每一行显示复选框-JQueryDataTable【英文标题】:HowtoshowCheckboxagainsteachRowbasedonColumnvalue-JQueryDataTable【发布时间】:2020-09-0909:15:15【问题描述】:我使用下面的代码在JqueryDatatable中显示复选框。vartable=$(\'#example\').Da... 查看详情

在c#中进行datatable操作:根据列数据插入一些汇总行

参考技术A可以根据DataTable中的数据行循环,新增一个汇总行,然后计算添加。追问请说得详细点,怎样计算才能达到上面的效果?? 参考技术B你那个Group的三级是否为一个树形结构?可以留联系详细看看!追问Group不是一个事... 查看详情

将数据表导出到 Excel 文件

】将数据表导出到Excel文件【英文标题】:ExportDataTabletoExcelFile【发布时间】:2009-11-1705:02:29【问题描述】:我有一个包含30多列和6500多行的DataTable。我需要将整个DataTable值转储到Excel文件中。任何人都可以帮忙处理C#代码。我需... 查看详情

需要根据列值分配不同的JSON数据结构

】需要根据列值分配不同的JSON数据结构【英文标题】:NeedtoassigndifferentJSONdatastructurebasedoncolumnvalue【发布时间】:2019-06-1014:14:52【问题描述】:CREATETABLEpublic.temp_test("part_number"charactervarying(255),"service"charactervarying(255),"label"text 查看详情

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

】C#需要存储一个解析后的SQLServer表,使用datatable或者list【英文标题】:C#needtostoreaparsedversionofSQLServertable,usedatatableorlist【发布时间】:2021-02-2619:58:59【问题描述】:我是C#新手。我知道数据表对于读取整个SQL表并将数据输出到gr... 查看详情

如何从 DataTable 中获取一列值的列表?

】如何从DataTable中获取一列值的列表?【英文标题】:HowtogetlistofonecolumnvaluesfromDataTable?【发布时间】:2014-07-0707:11:45【问题描述】:我有数据表。DataTabledt=newDataTable();dt.Columns.Add(newDataColumn("id",Type.GetType("System.Int32")));dt.Columns.Add(... 查看详情

c#通过datatable插入大量数据,50万数据只需要3秒

 数据库sql脚本:CREATEDATABASETESTDBGOUSETESTDBGOCREATETABLETAB1(NAMENVARCHAR(10),AGENVARCHAR(10),ADRESSNVARCHAR(10))deleteTAB1SELECT*FROMTAB1SELECTCOUNT(0)FROMTAB1 classProgram{staticvoidMain(str 查看详情

加载 DataTable 时使用默认列值以避免 Null

】加载DataTable时使用默认列值以避免Null【英文标题】:UsedefaultcolumnvalueswhenloadingDataTabletoavoidNulls【发布时间】:2013-07-1020:11:36【问题描述】:我有一个xsd数据集架构,它允许我为DataTable定义一个结构。对于每一列,我都设置了... 查看详情

我需要计算行的实例并根据多个列值删除重复项

】我需要计算行的实例并根据多个列值删除重复项【英文标题】:Ineedtocountinstancesofrowsanddeleteduplicatesbasedonmultiplecolumnvalues【发布时间】:2018-01-1801:11:29【问题描述】:基表成品因此,我正在努力将CSV导出排序为一种格式,使我... 查看详情

通过DataTable c#中的itemArray值查找DataRow

】通过DataTablec#中的itemArray值查找DataRow【英文标题】:FindDataRowthroughitemArrayvalueinDataTablec#【发布时间】:2020-11-2818:52:08【问题描述】:我想根据itemArray值从DataTable中获取datarow。数据表dtSchema由GetOleDbSchemaTable()填充。每行ItemArray都... 查看详情

Datatable C# - 如何根据 ID 从一个表中获取详细记录及其关联的另一表中的子记录

】DatatableC#-如何根据ID从一个表中获取详细记录及其关联的另一表中的子记录【英文标题】:DatatableC#-HowtogetdetailrecordfromonetableanditsassociatedsubrecordfromanothertablebasedonID【发布时间】:2020-11-2410:38:26【问题描述】:我在数据表中有一... 查看详情

如何在 C# 中将 DataTable 转换为通用列表 [重复]

】如何在C#中将DataTable转换为通用列表[重复]【英文标题】:HowtoConvertDataTabletoGenericListinC#[duplicate]【发布时间】:2016-12-1608:54:08【问题描述】:我需要将C#DataTable转换为通用集合列表DataTableColumnsRespectively1.EmpId(thisisIntDataType)2.EmpNam... 查看详情

根据列值删除Python Pandas中的DataFrame行[重复]

...删除行。例如-我有关于美国所有电视节目的数据框,我需要根据电视节目的季节和剧集删除电视节目的特定行。就像我需要删除T 查看详情

在 C# 中将 DataTable 转换为 SQL 的 CREATE TABLE + INSERT 脚本

】在C#中将DataTable转换为SQL的CREATETABLE+INSERT脚本【英文标题】:ConvertingaDataTabletoanCREATETABLE+INSERTscriptforSQLinC#【发布时间】:2011-07-1018:47:48【问题描述】:我需要从DataTable以及其中的DATA生成TSQL脚本。这不是一个单一的插入。除此... 查看详情

MySQL - 根据更新其他表列值触发更新列值

...述】:每当TABLE_A在同一ID的“已付款”列上更新时,我都需要更新该特定ID中“已付款”列上的TABLE_B。我正在尝试使用触发器考虑一些解决方案,但不知道如何。【问题讨论】:这听起来像 查看详情

SQL - 根据列值重新启动分区

...acolumnvalue【发布时间】:2020-08-1819:07:32【问题描述】:我需要创建一个新列,该列在每个RepeatedCall的每个RepeatedCall的每个0值处重新启动Customer_ID:+-------------+---------+----------------------+------------- 查看详情