2008-10-09 97 views
2

我在數據庫中有一張表,我正在使用LINQ to SQL檢索數據庫,並且作爲我想要添加到此列表中的一部分處理,然後使用新項目+我所做的任何更改更新數據庫。如何添加到Linq to SQL列表?

我想我能做到的是:(即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(); 

什麼情況是,修改發梗不過不要讓她添加任何新的項目我添加到列表中。

很明顯我在做這個錯誤,修改&添加到DB實體列表中的正確方法是什麼,然後提交所有更新&插入?

回答

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

您必須通過InsertOnSubmit添加新項目。

+0

是啊,我知道insertonsubmit,我希望有一個更優雅的方式插入和更新在同一個列表中 – 2008-10-09 06:49:40

1

你一定要告訴LINQ插入上提交的新行,使用InsertOnSubmit:

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

你不需要一個新的DataContext,你可以使用你正在使用的更新。

相同用於刪除DeleteOnSubmit(行)。不過,修改將被跟蹤。

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();