c#中同一个Datatable中的如何把重复的记录合并起来,
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#中同一个Datatable中的如何把重复的记录合并起来,相关的知识,希望对你有一定的参考价值。
Datatable中有两个列名,第一个列名是:名字,第二个列名是:数量
这里的有这样的记录:记录1、[名字]=李洋 [数量]=13
记录2、[名字]=李洋 [数量]=18
我想要的结果是: [名字]=李洋 [数量]=31
请给出代码,谢谢!!!
现在因为特殊原因,必须得在datatable里完成,在数据库里做这样的操作是在简单不过了,呵呵这样的问题我不是会来这上面问的,呵呵谢谢你,,,
DataTable dt2 = dt1.Clone();//复制下你说的那个表的表结构
DataRow[] drs = null;
foreach( DataRow dr in dt1 )
drs = dt2.Select( "姓名='" + dr["姓名"].ToString() + "'" );//查找dt2的重复数据
if( drs.Length > 0 )
drs["数量"] = drs["数量"] + dr["数量"];//将数量累加
else
dt2.newrow;//dt2里边new一个新行,把数据加进去
dt2即为所求。
写的有点马虎,没有环境,希望能对你有所帮助 参考技术A 如果说放入之前能判断一下再放进去的话,你可以设置DATATABLE的PrimaryKey 。但是具体情况一定要先放进去了再来删除或合并相同的记录,好像没有更好的方法,那位如果知道更好的方法请告诉一声,我也想知道。没有别的办法就是只能遍历整个Datatable了,遍历的方法,前面的兄台有写。我觉得设置主键还是有好处的,查找数据还是要方便一些 参考技术B 这种需求,在数据库中处理是比较合适的方法
SQL 的写法:
SELECT [名字], SUM([数量]) AS [数量] FROM 表名 GROUP BY [名字] 参考技术C DataTable d=new DataTable();
int i = 0;
foreach (DataRow dr in d.Table.Rows)
if (dr["名字"].ToString() == "李阳")
i += (int)dr["数量"];
return i; 参考技术D public static DataTable ToDt(DataTable dtTemp)
if (dtTemp != null)
DataTable dt = dtTemp;
//对dt中数据以名称进行升序排序
DataView dv = new DataView(dt);
dv.Sort = "OrderNumber asc";
//去重复数据
DataTable dtRs = dv.ToTable(true);
for (int i = 0; i < dtRs.Rows.Count; i++)
DataRow temp = dtRs.Rows[i];
int Qty = 0;
//循环排序后的数据dv
foreach (DataRowView dr1 in dv)
if (temp["OrderNumber"].ToString() == dr1["OrderNumber"].ToString())
Qty += Convert.ToInt32(dr1["Qty"]);
dtRs.Rows[i]["Qty"] = Qty;
return dtRs;
else
return null;
C#如何将datatable中的数据批量更新到MYSQL数据库
datatable中的数据就是从数据库表中读取的,我现在想修改了datatable一个数据,然后再更新到数据库这个表中,注意不是重新插入,是把原来数据进行更新!!!谢谢
参考技术A C#利用update更新数据到oracle数据库:第一步:打开oracle数据库
public static string connString = "";
public static OracleConnection conn = null;
//打开数据库连接
public static bool Open()
//从配置文件中获取连接字符串
//配置文件需要放在项目目录下的bin\Release中
connString = getXmlValue("connString");
conn = new OracleConnection(getXmlValue("connString"));
try
conn.Open();
Console.WriteLine("数据库连接成功");
return true;
catch (System.Exception ex)
Console.Write(ex.Message);
MessageBox.Show("未能连接到数据库");
return false;
第二步:执行更新方法:
public static int update(int ruleId, int equipmentId, String equipmentName, String propertyName, int ruleType, String ruleRequest, String ruleRequestOther, String ruleExplain)
String sql = "update Device_Attr t set t.BASEID = :equipmentId, t.BASENAME = :equipmentName,t.CA_NAME = :propertyName,t.CA_RULETYPE = :ruleType,t.CA_RULETEXT = :ruleRequest,t.CA_RULETEXT2 = :ruleRequestOther,t.CONTENT = :ruleExplain where t.CA_ID =:ruleId";
OracleCommand cmd = new OracleCommand(sql, conn);
OracleParameter param_1 = new OracleParameter(":equipmentId", equipmentId);
cmd.Parameters.Add(param_1);
OracleParameter param_2 = new OracleParameter(":equipmentName", equipmentName + "$");
cmd.Parameters.Add(param_2);
OracleParameter param_3 = new OracleParameter(":propertyName", propertyName);
cmd.Parameters.Add(param_3);
OracleParameter param_4 = new OracleParameter(":ruleType", ruleType);
cmd.Parameters.Add(param_4);
OracleParameter param_5 = new OracleParameter(":ruleRequest", ruleRequest);
cmd.Parameters.Add(param_5);
OracleParameter param_6 = new OracleParameter(":ruleRequestOther", ruleRequestOther);
cmd.Parameters.Add(param_6);
OracleParameter param_7 = new OracleParameter(":ruleExplain", ruleExplain);
cmd.Parameters.Add(param_7);
OracleParameter param_8 = new OracleParameter(":ruleId", ruleId);
cmd.Parameters.Add(param_8);
int result = cmd.ExecuteNonQuery();
return result;
以上是关于c#中同一个Datatable中的如何把重复的记录合并起来,的主要内容,如果未能解决你的问题,请参考以下文章
Datatable C# - 如何根据 ID 从一个表中获取详细记录及其关联的另一表中的子记录
如何将旧的 mdb-database 导入 C# DataTable [重复]