gpt4 book ai didi

c# - 在不将整个表加载到内存的情况下检查哪些消息已经存在

转载 作者:太空宇宙 更新时间:2023-11-03 14:50:29 24 4
gpt4 key购买 nike

我想在将消息添加到数据库之前检查是否已存在任何消息,但我当前的查询将整个表加载到内存中。从我的代码生成的查询基本上只是 select * from tableName

如何重写此查询以在数据库中进行评估?

public void AddMessages(IEnumerable<Message> messages)
{
if (messages == null)
throw new ArgumentNullException(nameof(messages));

var duplicates = (from currMsg in context.Messages
where messages.Any(msg =>
msg.Prop1 == currMsg.Prop1 &&
msg.Prop2 == currMsg.Prop2 &&
msg.Prop3 == currMsg.Prop3)
select currMsg);

var messagesWithoutDuplicates = messages.Except(duplicates);

context.Messages.AddRange(messagesWithoutDuplicates);
context.SaveChanges();
}

我也可以在一个循环中运行它,但是我会创建许多数据库调用而不是 1 个,我更愿意在单个调用中执行此操作。

最佳答案

如果你想检查表中有多少行,你可以使用 SELECT COUNT(*) FROM TABLE。在执行任务之前执行此查询。

或者如果您希望在无法插入行(重复)时更新你需要为此使用合并插入。

合并插入 (MySql) => https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html

合并插入 (Oracle) => https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm#SQLRF01606

关于c# - 在不将整个表加载到内存的情况下检查哪些消息已经存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51999936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com