【发布时间】:2018-03-22 05:08:25
【问题描述】:
我的 C# Windows 窗体应用程序中有两个数据表;
DataTable dtProduct;
DataTable dtDetails;
dtProduct 是从 MS Access 填充的,dtDetails 是从 MySql 填充的,它们有以下类似记录
dtProduct
code | pNameOrignal
----------------------
101 | product one
220 | product two
65 | product three
104 | product four
221 | product five
654 | product six
dtDetails
id | tid | code | pNameLocal | qty | price
-------------------------------------------------
1 |101 | 101 | some_local_name | 2 |20.36
2 |102 | 202 | some_local_name | 1 |15.30 // same entry as same tid and all same
3 |102 | 202 | some_local_name | 1 |15.30 //same entry as same tid and all same
4 |102 | 202 | some_local_name | 1 |10.00 //same entry as same tid but price is different
5 |102 | 202 | some_local_name | 2 |15.30 //same entry as same tid but different qty
6 |102 | 202 | some_local_name2 | 1 |15.30 //same entry as same tid but pNameLocal different
7 |103 | 202 | some_local_name | 1 |15.30 // different entry of same product see different tid
8 |104 | 65 | some_local_name | 5 |05.00
9 |105 | 700 | some_local_name | 2 |07.01 // does not exist in "dtProduct"
我目前正在使用dtProduct 循环遍历dtdetails 的所有记录,以根据两个表中code 列的唯一性从dtProduct 替换产品的原始名称pNameOrignal。我现有的代码如下所示;
dtDetails.Rows
.Cast<DataRow>()
.Join
(
dtProduct.Rows.Cast<DataRow>(),
r1 => new { p1 = r1["code"], p2 = r1["code"] },
r2 => new { p1 = r2["code"], p2 = r2["code"] },
(r1, r2) => new { r1, r2 }
)
.ToList()
.ForEach(o => o.r1.SetField("pNameLocal", o.r2["pNameOrignal"]));
现在需要什么
-
需要通过将 qty 设置为 2(如在当前记录中) 将具有 same tid and all same 的相同条目合并或生成一行和价格为 30.60(根据当前记录)
说明: 将完全相同(重复)的多条记录合并为一行,按记录数量保留其数量和价格。
针对具有
code = 700的tid = 105 的条目在dtProduct中不存在,它不会从那里替换pOrignalName,将保持与当前我的代码相同的名称,我需要使用该名称添加或连接“NotFound”。
【问题讨论】:
-
@JohnWu 我试图找到重复的行,但无法将它们合并为一个。并且只是想在 foreach 中为第 2 点设置一些条件。
-
我不知道为什么投票给关闭?