【问题标题】:Update the SQLite Database in C#在 C# 中更新 SQLite 数据库
【发布时间】:2021-01-20 09:19:16
【问题描述】:

在我的 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);

【问题讨论】:

    标签: c# .net xamarin xamarin.forms


    【解决方案1】:
    // 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" });
         }
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 此语句是必须在现有数据库中添加新记录的语句foreach (var record in getBanks.Where(c =&gt; c.Name != i.alias.name)) .. 但问题是你将如何做?或者实现这一目标的正确方法是什么?
      • 不,您检查每个循环中的每个别名...和 ​​a!=b a!=c a!=a 所以,我认为这就是问题所在。抱歉,我不知道如何实现,那么您必须澄清您的问题并提供有关您的数据的更多详细信息
      • 我发布了我通过api获取的数据格式..请看一下:)
      • 好吧,我正在与你的对象作斗争,你使用obj,我不知道那是什么:) 我认为这是“未注册”银行的集合。因此,在添加该银行之前,您可以检查该银行是否已经是 updateBanks 对象的一部分,并且只有在没有条目时才添加
      • 我发布了上面的代码,用于从 api 获取数据..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多