【问题标题】:How add only new city?如何只添加新城市?
【发布时间】:2012-03-13 11:35:14
【问题描述】:

我有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.

示例: 在数据库中:敖德萨,基辅

用户集:敖德萨,莫斯科。

我需要删除 Kiev 并添加 moscow 怎么做?

【问题讨论】:

  • 您的代码中有些地方毫无意义。 1) 什么是main.Id - 它没有在其他任何地方提及。 2) 你在discountViewByUser.DiscountCitys. 中有部分行。您能否描述一下您正在尝试做的事情,而不是您尝试如何实现它?
  • 您能解释一下您的真正需求是什么吗?您的描述似乎令人困惑,在我们了解您的问题之前,我们无法提供帮助

标签: c# asp.net entity-framework entity-framework-4


【解决方案1】:

我建议添加所有项目,然后删除重复项。

// 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 也可能会有所帮助。

【讨论】:

  • 在不提供Comparer 的情况下,Distinct 不太可能在这样的对象上工作。
  • 哎呀,我把它误读为使用 == 的默认比较,而实际上它是在比较 CityId。
【解决方案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);    
}

【讨论】:

    猜你喜欢
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    相关资源
    最近更新 更多