比较两个数据表并有效地绘制不同的新数据表

时间:2014-12-10 17:29:45

标签: c# linq datatable

本质上我有两个数据表

DataTable 1

PirateShipID  PirateShipPreference
123            1
122            2
121            3

和DataTable 2(具有不同的命名列,但数据类型相同。

RGPirateShipID PirateShipPreferenceType
123             1
122             1
121             3

我想抓住所有记录

PirateShipID == RGPirateShipID && PirateShipePreference != PirateShipPreferenceType

理想情况下使用Linq,因为我相信这将是我实现此目的的最快捷方式

        var idsNotinPirates = from r in DataTable1.AsEnumerable()
                          //Get all records that don't match on preference
                          where DataTable2.AsEnumerable().Any(r2 => r["PirateShiptID"] == r2["RGPirateShipID"] && r["PirateShipPreference"] != r2["PirateShipPreferenceType"])
                          select r;

然而,DataTable 1拥有大约10k的盗版,而Datatable2拥有100万次。

应用程序需要很长时间才能完成上述操作。

我如何才能提高效率?

1 个答案:

答案 0 :(得分:1)

我相信你应该这样做:

var query = from r in DataTable1.AsEnumerable()
            join r2 in DataTable2.AsEnumerable() on r["PirateShipID"] equals r2["RGPirateShipID"] into joinedTable
            where joinedTable["PirateShipPreference"] != joinedTable["PirateShipPreferenceType"]
            select r