如何在 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;
我正在从 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;