2011-11-09 58 views
0
  • 我从数据库中首先读取一组数据
  • 使用同一个表中的相同数据插入新记录。

我试过,但: -如何使用linq to sql读取和插入数据库?

using (var db = new 
    DataContext(ConfigurationManager.ConnectionStrings["DB"].ToString())) 
{ 
    var items = from t in db.Table1 
       where t.ID.Equals(100) 
       select t; 
    foreach (var item in items) 
    { 
     using (var db1 = new 
      DataContext(ConfigurationManager.ConnectionStrings["DB"].ToString())) 
     { 
      Table1 tab = new Table1 
      { 
       FName = item.FName, 
       LName = item.LName, 
       Number = item.Number, 
      }; 
      db1.Table1.InsertAllOnSubmit(tab); 
      db1.SubmitChanges(); 
     } 
    } 
} 

我不能编译。它抛出在行 'db1.Table1.InsertAllOnSubmit(标签)' 这个错误: -

'System.Data.Linq.Table.InsertAllOnSubmit(System.Collections.Generic.IEnumerable)' 无法推断从使用。尝试明确指定类型参数 。

+1

但问题是什么? – Pleun

+0

我已更新我的问题。请检查 – User13839404

+0

您的ID确实是独一无二的? – Pleun

回答

2

您的代码有一些缺陷。

你好像读一个表1(假设ID是唯一的),但你是喜欢收藏

快速尝试处理它,因为反正你一次添加只有一个表1:更换

db1.Table1.InsertAllOnSubmit(tab); 

通过

db1.Table1.InsertOnSubmit(tab); 

如果你的ID不是唯一的尝试:

List<Table1> items = (from t in db.Table1 
      where t.ID.Equals(100) 
      select t).ToList(); 

的代码的其余部分可以保持不变(但仍更换InsertAllOnSubmit)

更新

可以BIGTIME简化:

using (var db = new 
DataContext(ConfigurationManager.ConnectionStrings["DB"].ToString())) 
{ 
Table1 thisTable = (from t in db.Table1 
      where t.ID. == 100 
      select t).SingleOrDefault(); 

if (thisTable != null) 
{ 
     Table1 tab = new Table1() 
     { 
      FName = item.FName, 
      LName = item.LName, 
      Number = item.Number,    }; 
      db.Table1.InsertOnsubmit(tab) 
      db.SubmitChanges(); 
     } 
} 
} 

,如果你是100%肯定你的身份证将始终匹配使用.Single()而不是.SingleOrDefault()。如果没有结果匹配,Single将抛出异常。在这种情况下SingleOrDefault返回NULL。

+0

ID是一个非常独特的主键。从InsertALLonsubmit更改为InsertOnSubmit,我可以编译它。但我想知道我是否需要foreach循环,因为ID是唯一的,我将永远只返回一个记录 – User13839404

+0

不,我会更新我的答案 – Pleun