c# - 从一个 DataTable 中选择行而不是另一个

标签 c# linq datatable filtering

我正在尝试获取 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/

相关文章:

c# - 第一行未从 csv 导入到 DataTable 中

c# - 使用 iText 7 创建的可见签名未在 chrome 中显示

c# - Visual Studio JIT 调试器加载速度极慢,需要 30 秒

c# - 使用 LINQ 查询数据表

c# - IQueryable参数——如何查看?

php - DataTables 将表放在数据表中

html - css 库、DataTables 和 Bootstrap 中的不同样式

c# - SQL to LINQ Query with date in where 子句不起作用

c# - InProc 与 StateServer

c# - 使用c#进行聚合分组