2009-04-30 67 views
4

我有一個方法接收一個已經改變了屬性的客戶對象,我想通過替換該對象的舊版本將它保存回主數據存儲。識別和替換ObservableCollection中的對象的最有效方法是什麼?

有誰知道正確的C#方式來編寫僞代碼來做到這一點?

public static void Save(Customer customer) 
    { 
     ObservableCollection<Customer> customers = Customer.GetAll(); 

     //pseudo code: 
     var newCustomers = from c in customers 
      where c.Id = customer.Id 
      Replace(customer); 
    } 
+0

感謝您提出這個問題。本週早些時候我問過類似的問題(http://stackoverflow.com/questions/800091/how-do-i-update-an-existing-element-of-an-observablecollection),但不像你剛剛那樣做。 – 2009-04-30 13:35:22

回答

3

最有效是避免LINQ ;-p

int count = customers.Count, id = customer.Id; 
    for (int i = 0; i < count; i++) { 
     if (customers[i].Id == id) { 
      customers[i] = customer; 
      break; 
     } 
    } 

如果你想使用LINQ:這不是理想的,但將至少工作:

var oldCust = customers.FirstOrDefault(c => c.Id == customer.Id); 
    customers[customers.IndexOf(oldCust)] = customer; 

它通過ID(使用LINQ)找到它們,然後使用IndexOf來獲取位置,並使用索引器來更新它。有點風險,但只有一次掃描:

int index = customers.TakeWhile(c => c.Id != customer.Id).Count(); 
    customers[index] = customer; 
+0

我用你的第二個版本,它工作,很好,謝謝。 – 2009-04-30 12:25:29

相關問題