C# - 在WHERE子句中使用数组在List中搜索

时间:2015-08-20 21:07:25

标签: c# linq sqlite

C#

好的,我有类似的东西:

var message = db.Table<Message>().Where(cond => cond.ID == messageID).Single();
message.Status = status;

但我想将messageIDint更改为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,一次更新多行的任何帮助都将非常感激。

4 个答案:

答案 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();