检查sql server ce中是否存在某个项目的最佳方法?

时间:2012-03-14 21:20:15

标签: c# .net windows-phone-7 linq-to-sql sql-server-ce

好的,所以我基本上试图在检查数据库中是否存在项目时,确定哪种方式更有效。

我正在使用SQL Server CE在WP7上使用LINQ to SQL。

我将要将多个对象导入数据库。现在很有可能这些对象已经存在于数据库中,因此我需要检查每个项目是否存在,如果它已经存在,请跳过它,否则添加它。

有两种方法可以想到。第一个是使用foreach并检查数据库中是否存在具有相同名称的对象:

foreach(var item in items)
{
    //Make individual call to db for every item
    var possibleItem = /*SQL SERVER STATEMENT WITH WHERE CONDITION*/;
}

对数据库进行单独调用虽然听起来非常耗费资源。所以另一个想法是对数据库中的所有对象进行完全选择并将它们存储在列表中。然后几乎与foreach做同样的概念,除了现在我没有连接到db,我可以直接访问列表。您对这些方法有何看法?还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

如果您可以轻松地对项目进行排序,则可以从数据库中进行选择并逐步浏览列表,同时读取数据库以确定哪些项目是新项目。在保留内存的同时,这应该比多次选择快得多。

using(var reader = cmd.ExecuteReader())
{
  while(reader.HasRows && reader.Read())
  {
    var id = reader.GetInt32(0);
    // test how id compares to the memory list
  }
}

但是,如果内存无关紧要,为了简单起见,我可能只是将数据库中的所有键都读入内存。