我有2个数据表让我们说dtData1和dtData2。我在数据表中都有记录,我想要比较数据表,并希望创建一个新的数据表,让dtData3与uniqe记录一起使用。
假设:dtData1有10条记录,而dtData2有50条记录,但dtData2中的记录是7条记录与dtData1相同。所以在这里我想要dtData3中的唯一记录,意味着我只需要dtData3中的43条记录。
我们不知道在数据表中我们有重复,可能我们不会有重复,或者我们也可能会有所有重复的记录。
所以在dtData3中我需要独特的记录
有人请帮助我。
答案 0 :(得分:5)
var dtData3 = dtData2.AsEnumerable().Except(dtData1.AsEnumerable(), DataRowComparer.Default);
答案 1 :(得分:0)
那么需要比较dtData1
和dtData2
?相反,您可以从index7开始将内容从dtData2
复制到dtData3
。
答案 2 :(得分:0)
使用它..可能它会帮助你。
假设您有两个数据表
DataTable dt1 = new DataTable();
dt1.Columns.Add("Name");
dt1.Columns.Add("ADD");
DataRow drow;
for (int i = 0; i < 10; i++)
{
drow = dt1.NewRow();
drow[0] = "NameA" + 1;
drow[1] = "Add" + 1;
dt1.Rows.Add();
}
DataTable dt2 = new DataTable();
dt2.Columns.Add("Name");
dt2.Columns.Add("ADD");
DataRow drow1;
for (int i = 0; i < 11; i++)
{
drow1 = dt2.NewRow();
drow1[0] = "Name" + 1;
drow1[1] = "Add" + 1;
dt2.Rows.Add();
}
现在解决您的问题致电: -
DataTable d3 = CompareTwoDataTable(dt1, dt2);
方法是这样的; -
public static DataTable CompareTwoDataTable(DataTable dt1, DataTable dt2)
{
dt1.Merge(dt2);
DataTable d3 = dt2.GetChanges();
return d3;
}
答案 3 :(得分:0)
首先创建数组变量以保存datatable3的唯一coloumn值。使用带有第二个gridview行的Foreach循环。如果有任何匹配,则dnt将其保存在数组值中,如果dnt匹配则将其保存在数组中。并通过附加第三个gridview .......
显示它e.g
string[] name = new string[4];
int i=0,j=0;
foreach(GridViewRows gv in GridView1.rows)
{
if(gv.Cells[0].Text == GridView2.Rows[i].Cells[0].Text)' //if match
{
// dnt save
}
else' //if dnt match save in array for further use
{
name[j] = gv.Cells[0].Text;
j= j++;
}
i=i++;
}
在Array“name”中保存唯一值后...将其绑定在Third Gridview中 在第三个Gridview的DataBound期间添加此方法...
Private void GridView3_RowDataBound(object sender,EventArgs e)
{
if(e.Row.RowState == DataControlState.DataRow)
{
foreach(string nm in name)
{
e.Rows.Cells.Add(name);
}
}
}
答案 4 :(得分:0)
public DataTable CompareTwoDataTable(DataTable dtOriginalTable, DataTable dtNewTable, ArrayList columnNames)
{
DataTable filterTable = new DataTable();
filterTable = dtNewTable.Copy();
string filterCriterial;
if (columnNames.Count > 0)
{
for (int iNewTableRowCount = 0; iNewTableRowCount < dtNewTable.Rows.Count; iNewTableRowCount++)
{
filterCriterial = string.Empty;
foreach (string colName in columnNames.ToArray())
{
filterCriterial += colName.ToString() + "='" + dtNewTable.Rows[iNewTableRowCount][colName].ToString() + "' AND ";
}
filterCriterial = filterCriterial.TrimEnd((" AND ").ToCharArray());
DataRow[] dr = dtOriginalTable.Select(filterCriterial);
if (dr.Length > 0)
{
filterTable.Rows[filterTable.Rows.IndexOf(filterTable.Select(filterCriterial)[0])].Delete();
}
}
}
return filterTable;
}