C# 如何使用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();

我正在使用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更新),但我添加到列表中的任何新项都不会被添加


显然我做得不对,修改并添加到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();