如何在 sqlite-net 中提供列表作为我的参数

问题描述 投票:0回答:2

我正在构建一个 Xamarin Forms 应用程序并使用 Sqlite-net。我想运行一个删除查询,删除列表中具有字段的所有记录,如下所示:

//usersToDelete is a list of Objects each representing a user.
List<int> idsToDelete = new List<int>();
foreach (var user in usersToDelete)
{
    idsToDelete.Add(user.Id);
}
string dbQuery = "DELETE FROM Users WHERE Id IN (?)";
var deleteCount = await LocalDatabaseConnection.ExecuteAsync(dbQuery, idsToDelete);

这对我不起作用。它失败并显示错误无法存储类型:

System.Collections.Generic.List1[System.Int32]
。这是否意味着我已经在“(?)”位置的代码中构建了字符串?或者有什么方法可以提供它作为参数。

c# xamarin.forms sqlite-net sqlite-net-pcl
2个回答
1
投票

试试这个

var utd= usersToDelete.Select(i=> i.Id.ToString()).ToArray();
string ids=string.Join(",",utd);
string dbQuery = $"DELETE FROM Users WHERE Id IN ({ids})";

0
投票

除了使用 Serge 给出的答案中的方法之外,我不知道如何将列表或数组传递到 SQLite-net 中的书面 SQL 查询中。

这也应该有效,

//usersToDelete is a list of Objects each representing a user.
List<int> idsToDelete = new List<int>();
foreach (var user in usersToDelete)
{
    idsToDelete.Add(user.Id);
}

var deleteCount = await LocalDatabaseConnection.Table<Users>().DeleteAsync(x => x.idsToDelete.Contains(x.Id));

并更好地利用SQLite-net的功能。

© www.soinside.com 2019 - 2024. All rights reserved.