C# LINQ CustomDataRowEqualityComparer
我使用C# LINQ CustomDataRowEqualityComparer,c#,linq,C#,Linq,我使用CustomDataRowEqualityComparer()比较两个列数不同但共享某些列的数据表: var result= maindatatable.AsEnumerable().Except(dt.AsEnumerable(), new CustomDataRowEqualityComparer()).CopyToDataTable(); 如何使结果数据表仅包含上述上下文中dt中的列 结果数据表包含maindatatable 这是我的比较器课 public class Custom
CustomDataRowEqualityComparer()
比较两个列数不同但共享某些列的数据表:
var result= maindatatable.AsEnumerable().Except(dt.AsEnumerable(), new CustomDataRowEqualityComparer()).CopyToDataTable();
如何使结果数据表仅包含上述上下文中dt
中的列
结果数据表包含maindatatable
这是我的比较器课
public class CustomDataRowEqualityComparer : IEqualityComparer<DataRow>
{
public bool Equals(DataRow x, DataRow y)
{
return ((int)x["id"] == (int)y["id"]);
}
public int GetHashCode(DataRow obj)
{
return ((int)obj["id"]);
}
}
公共类CustomDataRowEqualityComparer:IEqualityComparer
{
公共布尔等于(数据行x、数据行y)
{
返回((int)x[“id”]==(int)y[“id”]);
}
public int GetHashCode(DataRow obj)
{
返回((int)obj[“id”]);
}
}
它返回
maindatable
中不存在于dt
中的所有行,因此您不知道如何返回主表中不在dt
中但列为dt
的所有行
通常,不能从maintable
中选择行,而从另一个DataTable
中选择列。因此,您必须用这些行填充dt
的新实例(使用dt.Clone()
创建所有列)
例如(假设表dt
的列也存在于maintable
中,但反之亦然):
使用
DataTable.Merge
。看看我的自定义实现,它允许在一个命名列上联合表(如您的id
):我想这也是您想要的。@TimSchmelter不完全是这样,dt中的所有行都存在于主数据表中,在结果数据表中,我想从maindatatable中选择dt中不存在的行,我附加的代码工作正常,但我不知道如何选择我想要的te列
var result = maindatatable.AsEnumerable()
.Except(dt.AsEnumerable(), new CustomDataRowEqualityComparer());
var dt2 = dt.Clone();
foreach(DataRow mainRow in result)
{
var newRow = dt2.Rows.Add();
foreach (DataColumn col in dt2.Columns)
newRow[col] = mainRow[col.ColumnName];
}