2012-03-13 30 views
0

我有CreateDiscountViewByUser discountViewByUser它包含用戶選擇的城市列表,但他們可能已經是那些已添加的城市。如何只添加新的城市?

List<DiscountCity> discountCities = (from city in db.DiscountCities 
           where city.DiscountId == discountViewByUser.Id 
           select city).ToList(); 
      for (int y = 0; y < discountCities.Count(); y++) 
      { 
       var dc = discountCities[y]; 
       bool flag = false; 
       for (int i = 0; i < discountViewByUser.DiscountCitys.Length; i++) 
       {  
        if (dc.CityId == discountViewByUser.DiscountCitys[i]) 
        { 
         flag = true; 
         discountCities.Remove(dc); 
         y--; 
        }      
       } 
       if (!flag) 
       { 
        db.DiscountCities.DeleteObject(dc);  
       } 
      } 
      foreach (var dc in discountCities) 
      { 
       DiscountCity discountCity = new DiscountCity 
               {Id = Guid.NewGuid(), 
               CityId = dc.CityId, 
               DiscountId = main.Id}; 
       db.DiscountCities.AddObject(discountCity); 
      } 

如何只添加新的城市? 我的代碼不能正常工作=(

UPDATE:

discountViewByUser.DiscountCitys type int[]. 

db.DiscountCities table: Id DiscountId CityId. 

例如: 在數據庫:敖德薩,基輔

用戶組:敖德薩,莫斯科

我需要刪除基輔和添加莫斯科如何做到這一點?

+0

有關於你的代碼,是沒有意義的幾件事情。 1)「main.Id」是什麼 - 它並不涉及其他任何地方。 2)你有'partialViewByUser.DiscountCitys.'部分行。你能描述一下你想要做的是什麼,而不是你想如何實現它? – Jamiec 2012-03-13 11:38:38

+0

你能解釋一下你的要求嗎?你的描述看起來很混亂,在我們理解你的問題之前我們無法幫助 – Jayanga 2012-03-13 11:41:14

+0

我更新了我的文章 – 2012-03-13 13:12:35

回答

0

我建議你分兩步做。

1)找到城市要刪除

var deleteCities = db.DiscountCities.Where(c => c.DiscountId == discountViewByUser.Id 
     && !discountViewByUser.DiscountCitys.Contains(c.CityId)); 
foreach(deleteCity in deleteCities) 
{ 
    db.DiscountCities.DeleteObject(deleteCity); 
} 

2)找到cityId的要插入

var insertCities = discountViewByUser.DiscountCitys.Except(
      db.DiscountCities.Where(c => c.DiscountId == discountViewByUser.Id) 
          .Select(c => c.CityId)); 
foreach(var insertCity in insertCities) 
{ 
    DiscountCity discountCity = new DiscountCity 
      {Id = Guid.NewGuid(), CityId = insertCity, DiscountId = discountViewByUser.Id}; 
    db.DiscountCities.AddObject(discountCity);  
} 
1

我建議添加所有th e項目,然後刪除重複。

// Where uniqueList is a List<T> of unique items: 
uniqueList.AddRange(valuesToAdd); 
uniqueList = uniqueList.Distinct(new CityEqualityComparer()).ToList(); 
// Sorry, I don't know how this would fit into your code 

既然你被他們的CityId的比較城市,你可能需要使用自定義的IEqualityComparer以確定哪些城市是重複的。

這裏是這樣的類的例子:

class CityEqualityComparer : IEqualityComparer<City> 
{ 
    public bool Equals(City arg1, City arg2) 
    { 
     return arg1.CityId == arg2.CityId; 
    } 

    public int GetHashCode(City arg) 
    { 
     return arg.CityId; 
    } 
} 

This question也可以是一定的幫助。

+0

它不太可能的'Distinct'將會在沒有提供'Comparer'的情況下在這樣的對象上工作。 – Jamiec 2012-03-13 11:52:00

+0

哎呀,我誤讀爲使用默認比較使用==時,實際上它是比較CityId。 – 2012-03-13 11:55:59

+0

這沒有幫助我 – 2012-03-13 13:12:47