首页 > 解决方案 > 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 列表增加时,这会扩展吗?

有没有更好的方法来做到这一点,还是我应该采取完全不同的方法?

标签: c#linq

解决方案


有一个更好的方法吗

就在这里; 与其保存在其他地方提取的 ID,不如考虑在原始表上添加一个额外的列,以指示之前是否提取了该行。然后,您将在此标志等于0false指示该行之前未拉出的任何值的位置构建查询;在每次查询之后,您应该检查查询是否返回任何行;如果是这样,请使用您在最近发送的查询中使用的相同条件执行更新操作,以将标志更新为指示它之前被拉出的值。


推荐阅读