我正在尝试获取DataTableA中的行列表,其中Column 1中的值不在Column1DataTableB中。

我正在使用以下LinQ查询

//Not in Database
var query = from i in dtImport.AsEnumerable()
            where !dtProducts.AsEnumerable().Any(p => p[colP] == i[colI])
            select i;


这样,我想要一个导入表中产品表中还没有的产品列表。

当我调试时,这似乎很快跳过了这一行,但是当我调用与该查询有关的任何内容(例如int rows = query.Count<DataRow>();DataTable dtResult = query.CopyToDataTable();)时,它似乎花费了很长时间,因此我只是停止了程序。

那么,我在做什么错呢?

最佳答案

Linq使用延迟执行。使用查询时执行查询(不声明时执行)
为了获得更好的性能,可以使用如下所示的HashSet

var set = new HashSet<int>(dtProducts.AsEnumerable().Select(p => p.colP));
var result = dtImport.AsEnumerable().Where(i => !set.Contains(i[colI])).ToList();

08-18 03:49