如何在列表中查找副本并更新相同的列表

时间:2015-06-09 06:56:40

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

在我的模特' City'具有以下属性

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意味着怎么做?

2 个答案:

答案 0 :(得分:2)

在您的代码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
}

另请注意,城市名称可能并非唯一。按城市代码搜索更好。如果您不需要更新代码和名称,则可以更新备注。

答案 1 :(得分:0)

使用此查询,我可以找到CityName的存在

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