建个DataTable3,循环DataTable1,查找DataTable2,写数据到DataTable3
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
解决方案 »
- 通过字符串获得对象
- 批量插入Excel的问题
- C# 发送mail的问题??如何把一个表的内容做为mail内容发送出去??在线急等....
- C#使用水晶报表问题
- datagridview绑定问题
- 把文本文件导入到access中,我的方法感觉效率太低,又没有更高效的方法。
- 如何获取一个目录下包含子目录内的所有文件名,并保存在一个数组中
- 这样得到父窗体中所有已经打开的子窗体的名称,急,在线等
- 01cn 精华(2003--2004,含软件工程,Delphi,java等等,请大家帮忙提前)
- 我想在datagridview上加字段但程序来是报错怎么回事呀? (来者给分呀)在线等待帮忙给处理一下!!!
- 使用C#是否可以实现实时监听数据库日志 读取和分析出数据库变更数据?
- C# 之奇葩问题关于Dataset 的fill 方法 求高手解决
已经做到取到相同数据,但是不存在的数据不知道如何处理!
public DataTable Merge(DataTable table1, DataTable table2)
{
DataTable table = new DataTable();
DataRow row = table.NewRow();
row[0] = "编号";
row[1] = "名称1";
row[2] = "名称2";
row[3] = "计算";
table.Rows.Add(row);
for (int i = 0; i < table1.Rows.Count; i++)
{
for (int j = 0; j < table2.Rows.Count; j++)
{
if (table1.Rows[i][0].ToString() == table2.Rows[j][0].ToString())
{
DataRow newRow = table.NewRow();
newRow[0] = table1.Rows[i][0].ToString();
newRow[1] = table1.Rows[i][1].ToString();
newRow[2] = table2.Rows[j][1].ToString();
newRow[3] = Convert.ToInt32(table1.Rows[i][1].ToString()) / Convert.ToInt32(table1.Rows[j][1].ToString());
table.Rows.Add(newRow);
}
}
}
return table;
}
{
dv.RowFilter = "编号="+table1.Rows[i][0].ToString();
if (dv.Count>0)
{
DataRow newRow = table.NewRow();
newRow[0] = table1.Rows[i][0].ToString();
newRow[1] = table1.Rows[i][1].ToString();
newRow[2] = dv[0][1].ToString();
newRow[3] = Convert.ToInt32(table1.Rows[i][1].ToString()) / Convert.ToInt32(dv[0][1].ToString());
table.Rows.Add(newRow);
}
else //不存在
{
DataRow newRow = table.NewRow();
newRow[0] = table1.Rows[i][0].ToString();
newRow[1] = table1.Rows[i][1].ToString();
newRow[2] = ...;
newRow[3] = ...;
table.Rows.Add(newRow);
}
}
//我这里写的字段2都是字符串类型,你可以按照你需要的修改这个语句
//关键是进行左连接查询就可以了
var result = from DataRow d1 in dt1.Rows
join DataRow d2 in dt2.Rows
on d1[0] equals d2[0]
into dt3
from p in dt3.DefaultIfEmpty()
select new
{
No = d1[0], //编号
Name1 = d1[1],//名称1
Name2 = p != null ? p[1] : "0"//名称2
};
result.ToList().ForEach(a =>
{
Console.WriteLine(a.No + " " + a.Name1 + " " + a.Name2 + " " + a.Name1 + "/" + a.Name2);
});
大神啊!!计算效率立马提高了几个级别!再请教一个问题,如果NAME1是数值,我要对NAME1进行相加,并在输出的最后显示合计的数值,如何写!
//你上面2楼那个普通的合并方法可以修改成这样就可以了
public DataTable Merge(DataTable table1, DataTable table2)
{
DataTable table = new DataTable();
//init new table
for (int i = 0; i < table1.Rows.Count; i++)
{
int j;
for (j = 0; j < table2.Rows.Count; j++)
{
if (table1.Rows[i][0].ToString() == table2.Rows[j][0].ToString())
{
//add new row 表1表2相同编号的行
break;
}
}
if (j >= table2.Rows.Count)
{
//add new row 表1有表2没有的行
}
}
return table;
}
//你上面2楼那个普通的合并方法可以修改成这样就可以了
public DataTable Merge(DataTable table1, DataTable table2)
{
DataTable table = new DataTable();
//init new table
for (int i = 0; i < table1.Rows.Count; i++)
{
int j;
for (j = 0; j < table2.Rows.Count; j++)
{
if (table1.Rows[i][0].ToString() == table2.Rows[j][0].ToString())
{
//add new row 表1表2相同编号的行
break;
}
}
if (j >= table2.Rows.Count)
{
//add new row 表1有表2没有的行
}
}
return table;
}