本质上我有两个数据表
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万次。
应用程序需要很长时间才能完成上述操作。
我如何才能提高效率?
答案 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