2016-11-25 193 views
-1

我有一個列表。當這個列表填充,我有這樣的事情:檢查項目是否在列表中並刪除舊項目

List<T> {Soc1, Soc2, Soc3} 

與Soc複雜的對象。然後我修改列表:刪除SOC2,加SOC4:現在

List<T> {Soc1, Soc3, Soc4} 

,在DB,我已經得到了第一個列表(1,2,3),我必須用新的更新(1,3- ,4)。如何在c#中執行此檢查?我嘗試使用列表方法包含

foreach(T t in oldList){ 
if(t.Contains(oldList)){ 
...} 

用於添加新的項目(S),但我停止元素的是(在這個例子中SOC 2)不存在了刪除。怎麼做?由於

回答

0

你可以做兩個迴路,並使用LINQ:當你修改列表(刪除項目)

// add the new ones... 
foreach (var newItem in newList.Where(n => !oldList.Any(o => o.Id == n.Id))) { 
    oldList.Add(newItem); 
} 

// remove the redundant ones... 
var oldIds = oldList.Select(i => i.Id); 
foreach (var oldId in oldIds) { 
    if (!newList.Any(i => i.Id == oldId)) { 
     oldList.Remove(oldList.First(i => i.Id == oldId)); 
    } 
} 
1

的foreach將打破。因此,最好使用while代替。 您使用一段時間的舊列表來刪除不再存在的元素,然後通過新列表添加新項目。

List<T> oldList = new List<T> { Soc1, Soc2, Soc3 }; 
List<T> newList = new List<T> { Soc1, Soc3, Soc4 }; 

int i = 0; 
// Go trough the old list to remove items which don't exist anymore 
while(i < oldList.Count) 
{ 
    // If the new list doesn't contain the old element, remove it from the old list 
    if (!newList.Contains(oldList[i])) 
    { 
     oldList.RemoveAt(i); 
    } 
    // Otherwise move on 
    else 
    { 
     i++; 
    } 
} 

// Now go trough the new list and add all elements to the old list which are new 
foreach(T k in newList) 
{ 
    if (!oldList.Contains(k)) 
    { 
     oldList.Add(k); 
    } 
}