0
두 개의 데이터 표에서 공통 행을 가져 오려고합니다. 그러나이 두 가지를 교차 연산하면 중복 행 (동일한 데이터 테이블 내에서 중복)이 제거되고 고유 행만 반환됩니다.열거 형 교차 결과로 중복 행 유지
결과에 중복 행을 유지하려면 어떻게해야합니까?
class Program
{
public static void Main(string[] args)
{
var a=ImportExcelToDataTable(@"D:\Dummy\Test\CD24.xlsx");
var b = ImportExcelToDataTable(@"D:\Dummy\Test\CD25.xlsx");
CustomDataRowComparer myDRComparer = new CustomDataRowComparer();
try
{
var comonData = a.AsEnumerable().Intersect(b.AsEnumerable(), myDRComparer).CopyToDataTable();
}
catch (Exception ex)
{
ex.ToString();
}
}
}
public class CustomDataRowComparer : IEqualityComparer<DataRow>
{
public bool Equals(DataRow x, DataRow y)
{
for (int i = 0; i < 6; i++)
{
if (i == 4)
{
//ignore
}
else
{
if (x[i].ToString() != y[i].ToString())
{
return false;
}
}
}
return true;
}
public int GetHashCode(DataRow obj)
{
return string.Join("^", obj.ItemArray.Select((x, i) => (i == 4) || (i > 6) ? "" : x.ToString()).ToArray()).GetHashCode();
}
}
이것은 단일 데이터 테이블에서 중복 행을 반환하지만 중복 행을 표시하는 두 데이터 테이블간에 공통 행을 가져 오려고합니다. 예 : 첫 번째 데이터 테이블에 두 개의 동일한 행 A와 B가 있으면 교차에서 두 행을 모두 표시해야합니다. –
다음과 같이하십시오 : 테이블의 ID를 비교해야한다고 가정합니다. table1.Field ("ID")는 Convert.ToInt32와 같습니다 (table2.Field ("ID")) –
Lakhtey