如何使用Linq to SQL添加到列表中?

时间:2008-10-09 06:36:27

标签: c# .net sql linq linq-to-sql

我在数据库中有一个表,我正在使用LINQ to SQL检索,作为我处理的一部分,我想添加到此列表,然后使用新项目更新数据库+我所做的任何更改

我认为我能做的就是:

var list = (from item in db.Table
            select item).ToList();

[do processing where I modify items & add to the list]

list = list.Distinct();

db.SubmitChanges();

发生的变化是修改发生(即SQL更新),但我添加到列表中的任何新项目都没有添加。

显然我做错了,修改&的正确方法是什么?添加到数据库实体列表,然后提交所有更新&插入

4 个答案:

答案 0 :(得分:5)

列表毫无意义。它只是容纳DataContext知道的对象。我们需要确保DataContext知道新的。重要的是,当我们向DataContext发出警告时,它们不必完整:

Item item;
if (needNewOne)
{
     item = new Item();
     db.InsertOnSubmit(item);
}
else
{
     item = list[i];
}
///  build new or modify existing item
///   :
db.SubmitChanges();

答案 1 :(得分:3)

您可以为它创建扩展方法:

static void EnsureInsertedOnSubmit<TEntity>( this Table<TEntity>  table
                                            ,IEnumerable<TEntity> entities)
 { foreach(var entity in entities) 
    { if  (   table.GetModifiedMembers(entity).Length == 0     
           && table.GetOriginalEntityState(entity) == default(TEntity))
       { table.InsertOnSubmit(entity);
       }
    }
 }

然后你可以这样做:

 var list = db.Table1.ToList();
 list.Add(new Item());
 db.Table1.EnsureInsertedOnSubmit(list);
 db.SubmitChanges();

答案 2 :(得分:1)

您必须通过InsertOnSubmit添加新项目。

答案 3 :(得分:1)

你必须告诉LINQ在提交时插入新行,使用InsertOnSubmit:

db.InsertOnSubmit(newrow);
db.SubmitChanges();

您不需要新的DataContext,您可以使用您用于更新的那个。

删除DeleteOnSubmit(行)相同。但是,将会跟踪修改。