【问题标题】:How to find duplicate in a list and update the same list如何在列表中查找重复项并更新同一列表
【发布时间】:2015-06-09 15:48:59
【问题描述】:

在我的模型“城市”中具有以下属性

publi class City{
            public string CityCode { get; set; }
            public string CityName { get; set; }
            public string Remarks { get; set; }
}

更新条目时,我只检查 CityName 的重复项。如果我想更新备注,我不能这样做。这是我的 Linq 查询

public void Update(City model)
        {
            var dup = (from c in _CityRepository.TableNoTracking
                       where c.CityName.Equals(model.CityName)
                       select c.CityName).FirstOrDefault();
            if (dup == null)
            {
                City city = new City();
                city.CityCode=model.CityCode;
                city.CityName = model.CityName;
                city.Remarks = (model.Remarks==null)?string.Empty:model.Remarks;
                _CityRepository.Update(city);
             }
        }

如果我想检查重复的 Cityname 除了那个 CityCode 意味着怎么做?

【问题讨论】:

  • 在更新方法中,我找到了 CityName 的重复项。如果我想更新备注,它不会更新。

标签: c# linq asp.net-mvc-4


【解决方案1】:

在您的代码中,dup 是城市名称。最好使用Any操作符来检查是否存在同名城市:

bool exists = _CityRepository.TableNoTracking
                 .Any(c => c.CityName == model.CityName);

但仅检查城市是否存在是不够的。您需要获取已保存的实体并使用模型中的值对其进行更新。要按名称搜索城市,您可以使用接受谓词的重载 FirstOrDefault 运算符:

var city = _CityRepository.TableNoTracking
              .FirstOrDefault(c => c.CityName == model.CityName);

然后检查是否找到城市并使用模型中的值更新它(您不需要更新城市名称,因为您按名称搜索):

if (city != null)
{
    city.CityCode = model.CityCode;
    city.Remarks = model.Remarks ?? string.Empty;
    _CityRepository.Update(city);
}
else
{
    // there is no match, so you need to create new city and save it
}

另外请记住,城市名称可能不是唯一的。最好按城市代码搜索。如果不需要更新代号和名称,只需要更新备注即可。

【讨论】:

  • @Indhu 您正在按城市名称(例如伦敦)搜索,并且您想更新找到的城市的城市名称。你怎么看 - 找到的城市的 CityName 是哪个值?
  • @Indhu 还要检查 CityName 检查是否应该区分大小写,最好是区分大小写
  • 更新后 - Any(c => c.CityName == model.CityName && c.CityCode != model.CityCode)。试着更好地解释你的目标。而不是 “我想检查重复的 Cityname 除了那个 CityCode 意味着” 使用 “我想检查是否存在同名的城市,但其他代码”
【解决方案2】:

使用这个查询我可以找到 CityName 的存在

 var dup = (from c in _CityRepository.TableNoTracking
                           where c.CityName.Equals(model.CityName) && c.CityCode!=model.CityCode
                           select c.CityName).FirstOrDefault();

【讨论】:

    猜你喜欢
    • 2013-11-17
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多