【发布时间】:2021-12-04 20:32:39
【问题描述】:
我是 C# 新手(之前有其他语言、C++、SQL AutoIT 的经验)。我有一个包含 10 列的数据表
Name, MemberNoA, MemberNoB, DriverLicense, MobileNo, Address1, Address2, Address3, ProgramJoinned, Remark
数据表大约有17,000行,我想做的是,如果同一个人的记录在数据表中出现超过2次,请在备注字段中添加描述。 4个标准来定义“同一个人”,任何一个标准匹配都会被视为“同一个人”
i Name + MemberNoA
ii Name + MemberNoB
iii Name + DriverLicense
iv Name + MobileNo
即如果有 3 条相同 Name 和相同 MemberNoA 的记录,需要在这 3 条记录的备注字段中添加描述。
我从以上 4 个标准中得出结果集,如下所示:
var resultCriteria1 = from gpr in dt.AsEnumerable()
group gpr by new {
Fld1 = gpr.Field < string > ("Name"),
Fld2 = gpr.Field < string > ("MemberNoA")
}
into grpp
where grpp.Count() > 2
select new {
Name = grpp.Key.Fld1,
MemA = grpp.Key.Fld2,
Cnt = grpp.Count()
};
之后,我循环遍历 dt 中的所有行,对于每一行,循环遍历 4 个条件中的所有结果集:
for (int i = 1; i < dt.Rows.Count; i++) {
foreach(var item in resultCriteria1) {
if ((item.Nam == s trName) && (item.MemA == M emberNoA)) {
dt.Rows[i].ItemArray[9] = d t.Rows[i].ItemArray[9] + "Criteria 1 match\r\n";
}
}
}
程序可以运行,但运行速度很慢!有没有类似简单sql语句的方法:
update table1 where
table1.name = table2.name and
table1.MemberNoA = table2.MemberNo2
set table1.Remark = "Criteria 1 match\r\n"
有没有办法在 C# 中做到这一点或任何优化它的方法?谢谢。
注册 林志峰
【问题讨论】: