【发布时间】:2014-02-19 00:38:11
【问题描述】:
我希望将许多文件导入数据库(使用自定义业务逻辑阻止简单的 SSIS 包使用)。
问题的高级描述:
- 将现有的 sql 数据拉入 DataTable(~1M 行)
- 将excel文件一次性读入二维数组
- 逐行验证字段(自定义逻辑)
- 检查现有 DataTable 中的重复项
- 插入数据行
- 将 DataTable 批量插入 SQL 表中
我的方法有问题: 必须检查每一行是否有重复,我认为调用远程服务器来利用 SQL 会太慢,所以我选择了 LINQ。查询很简单,但数据集的大小导致它需要爬网(90% 的执行时间花费在此查询检查字段上)。
var existingRows = from row in recordDataTable.AsEnumerable()
where row.Field<int>("Entry") == entry
&& row.Field<string>("Device") == dev
select row;
bool update = existingRows.Count() > 0;
还有哪些其他方法可以更有效地检查重复项?
【问题讨论】:
-
我的第一个想法是,您可能应该放弃
Count()以支持Any()。然后我意识到你可能会在整个数据集上循环它,在这种情况下,你可能最好使用Distinct()或Union()。
标签: c# sql-server linq