2012-11-07 24 views
1

有沒有辦法(使用LINQ可能)我可以優化下面的代碼。此代碼所做的是通過比較變量mySecondCollection中的項目來添加,刪除和更新變量myFirstCollection中的項目。可以以某種方式使用更多的LINQ方法/查詢或其他LINQ運算符,以便myFirstCollection變量儘可能快地進行比較和更新。還有哪些LINQ操作符/方法可用於優化基於C#集合的代碼?

要添加到我的要求,我ObservableCollection變量myfirstCollection綁定到WPF Grid,以便添加,刪除和更新都反映在數據綁定立即電網。

private void UpdateFirstCollection(ObservableCollection<MyDTO> myFirstCollection, IEnumerable<MyDTO> mySecondCollection) 
{ 
//Code to add items to First Collection, how to optimize this block? 
    foreach (var item in mySecondCollection.ToList()) 
    { 
     if (!myFirstCollection.Contains(item)) 
     { 
      myFirstCollection.Add(item); 
     } 
     else 
     { 
//Code to update items from First Collection, how to optimize this block? 
      var itemToUpdate = myFirstCollection.FirstOrDefault(dto => dto.ID == item.ID); 
      if (itemToUpdate != null) 
      { 
       itemToUpdate = item; 
      } 
     } 
    } 

//Code to remove items from First Collection, how to optimize this block? 
    var copy = new ObservableCollection<myDTO>(myFirstCollection); 
    foreach (var item in copy.ToList()) 
    { 
     if (!mySecondCollection.Contains(item)) 
     { 
      myFirstCollection.Remove(item); 
     } 
    } 
} 

任何有助於重構/提高基於任何文章/鏈接上面的代碼是高度讚賞。

回答

0

也許我失去了一些東西,但因爲你只需要添加的東西存在於mySecondCollectionmyFirstCollection,然後刪除的東西,不mySecondCollection,你爲什麼不只是明確myFirstCollection存在,從mySecondCollection添加一切?

private void UpdateFirstCollection(ObservableCollection<MyDTO> myFirstCollection, IEnumerable<MyDTO> mySecondCollection) 
{ 
    myFirstCollection.Clear(); 
    foreach(var item in mySecondCollection) 
    { 
     myFirstCollection.add(item); 
    } 
} 

請告訴我,如果我過度簡化了這一點。

+0

如果我清除myFirstCollection對象時,也會清除綁定了WPF網格,如果有在網格中的任何選擇 - 該選擇也將被擦除..我需要一些其他優化的方式..! – VS1

0

您正在添加任何新項目,移除任何移除的項目以及更新任何更改的項目。你基本上取代了整個集合。

myFirstCollection = mySecondCollection; 

我知道這可能是不希望從ObservableCollection的角度來看,這樣反而

myFirstCollection.Clear(); 
foreach (var item in mySecondCollection) 
    myFirstCollection.Add(item); 
+0

如果我清除myFirstCollection對象,它也將清除綁定到它的WPF網格,並且如果在網格中有任何選擇,那麼選擇也將被擦除..我需要一些其他優化方法..! – VS1

相關問題