我正在尝试获取 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();
关于c# - 从一个 DataTable 中选择行而不是另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8902948/