在我的模特' 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意味着怎么做?
答案 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();