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

我认为您可以尝试使用Any,并且没有任何理由需要使用where两次。

using (DatabaseWithIDs dbWithIDs = new DatabaseWithIDs())
{
List<ItemsToProcess> items = db.Items
.Where(x => x.IWantThis && dbWithIDs.TableWithIDs.Any(y=>y.Id != x.Id)) //conditions to get items from first database
.Select(x => new ItemsToProcess() {x.Id}) //etc.
}

最新更新