Разница между двумя таблицами данных на основе данного столбца - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь найти разницу между двумя таблицами данных на основе заданного имени столбца.Я не вижу, что я делаю не так, но когда я передаю две разные таблицы данных, я не получаю результата.

    dt1                  dt2
ID    Percent        ID    Percent
---   -------        ---   -------
1     100            1     100
2     100            2     100
..    ...            ..    ...
50    0              50    20
..    ...            ..    ...

, поэтому я вызываю GetTableDiff (dt1, dt2, "Percent") и вместополучая одну строку (ID: 50, процентов: 20), я ничего не получаю.

public static DataTable GetTableDiff(DataTable dt1, DataTable dt2, string sColumn)
{     
    DataTable dtDiff = new DataTable();
    try
    {
        var diff = from r1 in dt1.AsEnumerable()
                    join r2 in dt2.AsEnumerable()
                        on r1.Field<int>(sColumn)
                        equals r2.Field<int>(sColumn) into g
                    where !g.Any() // get only rows which do not have joined rows from dt2
                    select r1;

        if (diff.Count() > 0)
            dtDiff = diff.CopyToDataTable();
    }
    catch (Exception ex)
    {
    }
    return dtDiff;
}

1 Ответ

0 голосов
/ 28 сентября 2018

Вам нужно присоединиться к "ID" вместо sColumn строки, а затем сравнить ожидаемое имя столбца.

from r1 in dt1.AsEnumerable()
                join r2 in dt2.AsEnumerable()
                    on r1.Field<int>("ID")
                    equals r2.Field<int>("ID") 
                where r2.Field<int>(sColumn) != r1.Field<int>(sColumn) 
                select r1;
...