c# - C# Linq SQL 获取 ID 不在表中的结果
问题描述
我正在尝试编写一个脚本,该脚本会定期从数据库中提取行并对其进行处理。但是它拉出的行需要以前没有被拉过。
为此,我使用了一个单独的数据库来保存我之前提取的 ID。但是我不知道我的解决方案是否会随着 ID 列表的增长而真正扩展?
using (FirstDatabase db = new FirstDatabase())
using (DatabaseWithIDs dbWithIDs = new DatabaseWithIDs())
{
List<ItemsToProcess> items = db.Items
.Where(x => x.IWantThis == true ) //conditions to get items from first database
.Where(x => !dbWithIDs.TableWithIDs.Select(y => y.Id).Contains(x.Id) )
.Select(x => new ItemsToProcess() {x.Id}) //etc.
}
当 ID 列表增加时,这会扩展吗?
有没有更好的方法来做到这一点,还是我应该采取完全不同的方法?
解决方案
有一个更好的方法吗
就在这里; 与其保存在其他地方提取的 ID,不如考虑在原始表上添加一个额外的列,以指示之前是否提取了该行。然后,您将在此标志等于0
或false
指示该行之前未拉出的任何值的位置构建查询;在每次查询之后,您应该检查查询是否返回任何行;如果是这样,请使用您在最近发送的查询中使用的相同条件执行更新操作,以将标志更新为指示它之前被拉出的值。
推荐阅读
- python - 基于 case-when 返回值过滤值会导致 SyntaxError
- reactive-programming - 集群分片比缓存更复杂吗?
- azure-cosmosdb - Azure Synapse 链接到 Cosmos DB 是否适用于托管标识?
- azure - Databricks 流到批处理过程
- linux - Linux 音频驱动程序和 ALSA(外部)时钟选择
- java - “数据/蓝图”对象的用户特定版本
- powerbi - 有没有办法在PowerBI中仅当名称相同时才从前一行计算行?
- python - 使用正则表达式从 pandas df 中提取字符串
- blazor - 使用 SSL 创建了 Blazor 服务器端项目,如何切换到非 SSL?
- ruby-on-rails - 带有 Nginx 和 Rails 的 Docker:无法访问此站点