微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 C# 中更新 SQLite 数据库

如何解决在 C# 中更新 SQLite 数据库

在我的 Xamarin 应用中,有一个 Picker数据库获取银行列表,而这个数据库通过 API 获取银行详细信息。

一切正常,但现在我想更新数据库,如果在 API 中添加了新的银行,我想将它们添加到现有数据库中。

我写了这个小代码,但问题是,它首先从数据库输出所有现有记录,然后打印新记录,多次作为记录总数,例如(如果有十条记录,每条记录会打印十次)

viewmodel.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" });
     }
}
,

我不知道您的数据,但是您有太多的 foreach 循环,并且您正在每个循环中检查整个集合。因此,您的条件可能会在每个循环中捕获每个帐户。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。