【问题标题】:How to merge values of rows from a multiple column list in c#?如何在c#中合并多列列表中的行值?
【发布时间】:2015-07-02 15:58:09
【问题描述】:

我正在从 sql server 数据库和数据库中获取数据,我有列 selectedId。如果 checkbox1 为 true,则将 selectedId 分配为 1。如果 checkbox2 为 true,则将 selectedId 分配为 2。 所以表中有两列。 employeeId 和 SlectedId。
这是我的表在 SQL 中的样子:

表:

EmployeeId    SelectedId  
1234          1  
1234          2  
1111          1  
2222          2  

等等..

所以,这背后的想法是,我有一个网格,用户选中复选框,它以我提到的 SQL 填充表的方式保存在数据库中。 保存数据后,我想查看保存的更改。 我查询我的数据库并将结果存储在数据表中。然后我使用'foreach'遍历每一行并创建一个多列自定义列表,如下所示:

List<ResultClass> res = new List<ResultClass>();
foreach (DataRow row in dt.Rows)
{
    ResultClass result = new ResultClass ();
    result.employeeId = row["emplid"].ToString().Trim();

    if (row["selectedId"] != DBNull.Value)
    {
        if (Convert.ToInt16(row["selectedId"]) == 1)
            result.isCheckbox1 = true;
        if (Convert.ToInt16(row["selectedId"]) == 2)
            result.isCheckbox2 = true;
    }
    else
    {
        result.isCheckbox1 = false;
        result.isCheckbox2 = false;
    }

    res.Add(result);      //res is my list          
}

return res;

所以,现在我在内存中有一个如下列表:

employeeId   checkbox1    Checkbox2  
1234         true         false  
1234         false        true  

现在我想合并这些行,以便在 gridview 中为 employeeId 1234 显示两个单独的行,而不是显示如下:

employeeId   checkbox1    checkbox2  
1234         true         true  

【问题讨论】:

    标签: c# list multiple-columns


    【解决方案1】:

    您可能会想出一个 SQL 查询来为您执行此操作,但如果您想在 C# 中执行此操作,那么我会为您的结果创建一个字典,其中 id 作为键,然后只需更新复选框找到它们时的值:

    var resultsById = new Dictionary<string, ResultClass>();
    
    foreach (DataRow row in dt.Rows)
    {
        var id = row["emplid"].ToString().Trim();
    
        ResultClass result;
    
        if (!resultsById.TryGetValue(id, out result))
        {
            result = new ResultClass
            {
                employeeId = id
            };
            resultsById.Add(id, result);
        }
    
        if (row["selectedId"] != DBNull.Value)
        {
            result.isCheckbox1 |= (int) row["selectedId"] == 1;
            result.isCheckbox2 |= (int) row["selectedId"] == 2;
        }            
    }
    
    return resultsById.Values;
    

    【讨论】:

    • 谢谢查尔斯..你能否也请分享我怎样才能使用 SQL 查询实现类似的行为?
    • 我写答案时的想法是基于您在代码后绘制的表格 - 遗憾的是,这不是它在数据库中的存储方式。可能仍然有可能,但我认为这并不简单(但我不是 SQL 专家!)。
    猜你喜欢
    • 1970-01-01
    • 2019-08-27
    • 2021-08-03
    • 1970-01-01
    • 2016-10-11
    • 2018-10-08
    • 2016-04-03
    • 2019-12-09
    • 1970-01-01
    相关资源
    最近更新 更多