C# 如何使用Linq to SQL添加到列表中?
我正在使用LINQ to SQL检索数据库中的一个表,作为处理的一部分,我想添加到此列表中,然后用新项+我所做的任何更改更新数据库 我想我能做的是:C# 如何使用Linq to SQL添加到列表中?,c#,.net,sql,linq,linq-to-sql,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();
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更新),但我添加到列表中的任何新项都不会被添加
显然我做得不对,修改并添加到DB实体列表,然后提交所有更新和插入的正确方法是什么?您必须通过InsertOnSubmit添加新项目。该列表毫无意义。它只是碰巧包含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();
您必须使用InsertOnSubmit告诉LINQ在提交时插入新行:
db.InsertOnSubmit(newrow);
db.SubmitChanges();
您不需要新的DataContext,可以使用正在用于更新的DataContext
delete DeleteOnSubmit(第行)与此相同。修改将被跟踪。您可以为其创建扩展方法:
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);
}
}
}
是的,我知道insertonsubmit,我希望有一种更优雅的方式在同一个列表中进行插入和更新
var list = db.Table1.ToList();
list.Add(new Item());
db.Table1.EnsureInsertedOnSubmit(list);
db.SubmitChanges();