【发布时间】:2019-03-19 18:25:01
【问题描述】:
如何比较 C# 中的 2 个数据表 例如 数据表1
- a,a,a,a,1,a,a,a,a,a
- a,a,a,a,1,a,a,a,a,a
- a,a,a,a,2,a,a,a,a,a
- a,a,a,a,2,a,a,a,a,a
- a,a,a,a,3,a,a,a,a,a
数据表2
- b,b,b,b,1,b,b,b,b,b
- b,b,b,b,1,b,b,b,b,b
- b,b,b,b,1,b,b,b,b,b
- b,b,b,b,2,b,b,b,b,b
- b,b,b,b,2,b,b,b,b,b
如何运行 dataTable1 [5] 中的第一行 = 1,如果 dataTable2 [5] 也包含 1,则打印出该行。继续直到完成。然后继续循环到dataTable1中的第二个检查dataTable2
这是我的代码
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CompareLinuxWithWindow
{
class Program
{
static void Main(string[] args)
{
DataTable dt1 = ConvertToDataTable(@"C:\Users\manchunl\Desktop\Sample1.txt", 10);
DataTable dt2 = ConvertToDataTable2(@"C:\Users\manchunl\Desktop\Sample2.txt", 10);
foreach (DataRow row in dt1.AsEnumerable())
{
string temp_dt1 = "";
string[] words = temp_dt1.Split(',');
string.Join(",", row.ItemArray.Select(x => x.ToString()));
temp_Linux = (string.Join(",", row.ItemArray.Select(x => x.ToString())));
}
foreach (DataRow row in dt2.AsEnumerable())
{
string temp_dt2 = "";
string.Join(",", row.ItemArray.Select(x => x.ToString()));
temp_dt2 = (string.Join(",", row.ItemArray.Select(x => x.ToString())));
}
Console.WriteLine();
Console.WriteLine("Press enter to exit.");
Console.Read();
}
public static DataTable ConvertToDataTable(string filePath, int numberOfColumns)
{
DataTable tbl = new DataTable();
for (int col = 0; col < numberOfColumns; col++)
tbl.Columns.Add(new DataColumn("Column" + (col + 1).ToString()));
string[] lines = System.IO.File.ReadAllLines(filePath);
foreach (string line in lines)
{
var cols = line.Split(null);
DataRow dr = tbl.NewRow();
for (int cIndex = 0; cIndex < numberOfColumns; cIndex++)
{
dr[cIndex] = cols[cIndex];
}
tbl.Rows.Add(dr);
}
return tbl;
}
public static DataTable ConvertToDataTable2(string filePath, int numberOfColumns)
{
DataTable tbl = new DataTable();
for (int col = 0; col < numberOfColumns; col++)
tbl.Columns.Add(new DataColumn("Column" + (col + 1).ToString()));
string[] lines = System.IO.File.ReadAllLines(filePath);
foreach (string line in lines)
{
var cols = line.Split(',');
DataRow dr = tbl.NewRow();
for (int cIndex = 0; cIndex < numberOfColumns; cIndex++)
{
dr[cIndex] = cols[cIndex];
}
tbl.Rows.Add(dr);
}
return tbl;
}
}
}
【问题讨论】:
-
您已经在遍历各个表行,您只需放入一个嵌套循环并比较每一行中的列。
-
是的,但我不确定如何编写嵌套循环,因为 temp_dt1 和 temp_dt2 在每个 foreach 循环中
-
实际上,因为您想检查相同的行(即两者中的第 1 行),您甚至不需要嵌套。只需使用简单的 for 循环(使用索引)并访问 table.Rows[index] 即可获取两个数据表(dt1、dt2)的行对象。然后你就可以比较了。
-
仍然不知道在哪里写:(你能帮我吗?提前谢谢
-
@appleorange,表示你想要 dataTable1 [5] 即 = 1,如果 dataTable2 [5] 也包含 1 => equals 然后打印?
标签: c#