Как добавить только новый город? - PullRequest
0 голосов
/ 13 марта 2012

У меня 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);
            }

как добавить только новый город?Мой код не работает = (*

ОБНОВЛЕНИЕ:

discountViewByUser.DiscountCitys type int[].

db.DiscountCities table: Id DiscountId CityId.

пример: в базе данных: Одесса, Киев

пользовательский набор: Одесса, Москва.

Мне нужно удалить Киев и добавить Москву, как это сделать?

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Я рекомендую добавить все элементы, а затем удалить дубликаты.

// 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;
    }
}

Этот вопрос также может помочь.

0 голосов
/ 13 марта 2012

Я предлагаю вам сделать это в 2 шага.

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);    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...