c# - 在 C# 中更新 SQLite 数据库
问题描述
在我的 Xamarin 应用程序中,有一个Picker从数据库中获取银行列表,这个数据库通过 API 获取银行详细信息。
一切正常,但是现在,我想更新数据库,如果在 API 中添加了新的银行,我想将它们添加到现有数据库中。
我写了这个小代码,但问题是,它首先从数据库中输出所有现有记录,然后打印新记录,是记录总数的许多倍,例如(如果有十条记录,它将打印每条记录十次)。
视图模型.cs
// Load all Banks into a List
var getBanks = await App.Database.GetBankAsync();
// Update the Bank Details where new Banks doesn't exist in the Database
List<Bank> updateBanks = new List<Bank>();
foreach (Banks i in obj.banks)
{
foreach (var record in getBanks.Where(c => c.Name != i.alias.name))
{
updateBanks.Add(new Bank { Name = i.alias.name, Status = "Not Registered" });
}
}
foreach (var bank in updateBanks)
{
await App.Database.SaveBankAsync(bank);
}
// Load all Banks into a List
var getBanksUpdated = await App.Database.GetBankAsync();
// Load the Banks whose Status is "Not Registered"
foreach (var record in getBanks.Where(c => c.Status == "Not Registered")
{
_bankList.Add(record);
}
public class Alias
{
public string name { get; set; }
}
public class Banks
{
public Alias alias { get; set; }
public string id { get; set; }
}
public class RootObject
{
public List<Banks> banks { get; set; }
}
通过 API 获取的数据
{
success: true,
banks: [
{
alias: {
name: "Bank 1",
Address: "Earth"
},
endpoint: {
uri: "http://127.0.0.1:0000"
},
state: "Registered",
createdAtUtc: "2021-01-19T13:55:12.2318662",
updatedAtUtc: "2021-01-19T13:55:14.9944042"
},
]
}
从 API 获取数据的代码
HttpClient httpClient = new HttpClient(new NativeMessageHandler());
Uri getDataBanks = new Uri(string.Format("http://127.0.0.1:0000/Banks"));
HttpResponseMessage restponseBanks = await httpClient.GetAsync(getDataBanks);
string contentBanks = await restponseBanks.Content.ReadAsStringAsync();
RootObject obj = JsonConvert.DeserializeObject<RootObject>(contentBanks);
解决方案
// get the names of all existing banks
List<string> names= obj.banks.Select(u => u.Name).ToList();
// get the names of all banks taken from the API
List<string> names_new= getBanks.Select(u => u.Name).ToList();
foreach (var record in names_new)
{
//check if the bank is exists or not
if(! names.contains(record)
{
updateBanks.Add(new Bank { Name = record.alias.name, Status = "Not Registered" });
}
}
推荐阅读
- amazon-web-services - 如何使用 eb 扩展将 ec2 实例添加到 aws 中的现有目标组
- jmeter-5.0 - 从响应中提取值并在下一个采样器请求正文中使用它
- arduino - SIM7600CE - 如何通过软件知道SIM卡何时注册到网络
- php - Wordpress 从 api 更新数据
- c++ - replace_first_copy,有很多警告和错误
- css - 如何实现支持 HTML 的工具提示?
- mysql - 如何删除mysql中所有重复的行
- r - R - 使用for循环或lapply对文件夹中的两个文件应用函数并将结果保存在一个数据帧中
- python - 使用 Python 查找字符串中的相似点和矛盾点
- multithreading - 对于通过单个语句访问的变量,我是否需要 QMutex?