如何在 C# 中合并多列列表中的行值?

How to merge values of rows from a multiple column list in c#?

我正在从 sql 服务器数据库和数据库中获取数据,我有一列说 selectedId。如果 checkbox1 为真,则将 selectedId 分配为 1。如果 checkbox2 为真,则将 selectedId 分配为 2。 所以 table 中有两列。 employeeId 和 SlectedId.
这是我的 table 在 SQL 中的样子:

Table:

EmployeeId    SelectedId  
1234          1  
1234          2  
1111          1  
2222          2  

等等..

所以,这背后的想法是,我有一个网格,用户选中这些框,然后按照我提到的 table 如何填写 SQL 的方式将其保存在数据库中。 保存数据后,我想查看保存的更改。 我查询我的数据库并将结果存储在数据 table 中。然后我使用 '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  

您可能想出一个 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;