Xamarin Android:创建SQLite DB表某些条目的副本的有效方法

时间:2018-09-16 10:06:44

标签: c# sqlite xamarin xamarin.android android-sqlite

我有一个处理某些客户信息的Xamarin(C#)Android应用程序。我有一个下面的方法正在从SQLite数据库中读取(连接存储在全局变量 globalVars.Db 中),这是特定客户的一些引号(名称存储在另一个全局变量 globalVars.Customer )。 给定我要传递给此方法的数字 n ,我只是想用更多通用名称(例如“ 默认客户1 ”,“ 默认客户2 ”等)。 下面的代码可以正常工作,但是似乎相对较慢,尤其是当n为3或更大时。 有没有更有效的方法来实现我的目标?

private void cloneCustomer(int n)
    {
        var tableQuotes = from d in globalVars.Db.Table<dbQuotes>()
                          where d.CustomerName == globalVars.Customer
                          select d;

        for (int i = 1; i <= n; i++)
        {
            foreach (var quote in tableQuotes)
            {
                quote.CustomerName = "Default customer " + i;
                globalVars.Db.Insert(quote);
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

将insert循环块包装为单个事务

private void cloneCustomer(int n)
    {
        var tableQuotes = from d in globalVars.Db.Table<dbQuotes>()
                          where d.CustomerName == globalVars.Customer
                          select d;

        globalVars.Db.RunInTransaction(() => {

          for (int i = 1; i <= n; i++) {
            foreach (var quote in tableQuotes){              
                quote.CustomerName = "Default customer " + i;
                globalVars.Db.Insert(quote);
             }
           }

       });
}