我正在尝试获取DataTableA
中的行列表,其中Column 1
中的值不在Column1
的DataTableB
中。
我正在使用以下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();