C#
好的,我有类似的东西:
var message = db.Table<Message>().Where(cond => cond.ID == messageID).Single();
message.Status = status;
但我想将messageID
从int
更改为int[]
,因此我会选择cond.ID
位于int[] messageID
的所有数据。
我需要像.Where(cond => cond.ID IN messageID)
这样的东西。
我不想这样做:
foreach(var ID in messageID)
{
message = db.Table<Message>.Where(cond => cond.ID == ID).Single();
message.Status = status;
db.Update(message);
}
我使用SQLite,一次更新多行的任何帮助都将非常感激。
答案 0 :(得分:3)
这样做:
var messages = db.Table<Message>().Where(msg => messageIDs.Contains(msg.ID));
答案 1 :(得分:2)
我认为这应该有用。
var message = db.Table<Message>().Where(cond => messageIDs.Any(id => cond.ID == id).Single();
message.Status = status;
答案 2 :(得分:2)
这样的事情:
var messageIDs = new int[]; // assume it's filled
var result = db.Table<Message>().Where(cond => messageIDs.Contains(cond.ID));
foreach(var message in result)
message.Status = status;
db.SaveChanges(); //or something similar.
它将返回测试数组中存在ID的所有消息。
建议:Contains
可以在SQL中翻译为OR
。它可能表现不佳。特别是在应用于string
。
同时,您可以使用status
循环为每封邮件设置foreach
。您正在使用的ORM可能具有类似db.SaveChanges
的内容,它应该向数据库发送单个更新查询。
答案 3 :(得分:0)
使用.contains()
方法
var message = db.Table<Message>().Where(cond => messageID.contains(cond.ID)).Single();