如何使用linq to sql在数据库中读取和插入?

时间:2011-11-09 19:34:09

标签: 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(tab)”行引发此错误: -

  

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

1 个答案:

答案 0 :(得分:2)

您的代码存在一些缺陷。

你似乎读了一个Table1(假设id是唯一的),但你把它当作一个集合

快速尝试,因为您一次只添加一个table1:替换

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)

<强>更新

你可以简化大时间:

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%确定你的id总是匹配使用.Single()而不是.SingleOrDefault()。如果没有结果匹配,Single将抛出异常。在这种情况下,SingleOrDefault返回NULL。