我有3个字段:urlName
,displayName
和active
。这是检查编辑记录。我想在这里做的是检查UrlName
在Db中是唯一的,但与此同时,如果用户已经保存了Url但更改了DisplayName
和Active
,则记录应该更新
任何人都告诉我如何解决这个问题。
public bool NothingExceptUrlNameExists(string urlName, string displayName, bool active)
{
return (from p in _db.SubMenus
where p.UrlName == urlName && (p.DisplayName != displayName || p.DisplayName == displayName) && (p.Active != active || p.Active == active)
select p).Any();
}
更新记录,如
TryUpdateModel(existingMenu);
_menu.Add();
这就是我想要实现的目标
我应该在Query DisplayName和Active中添加其他2个值。假设已经在DB中“联系”UrlName。我正在从下拉列表中加载值,返回UrlName =“About”,DisplayName =“About Us”,Active = true。现在编辑记录。这是匹配的条件。
1 - UrlName =“关于”,DisplayName =“关于测试”,Active = true - >这应该更新。
2 - UrlName =“关于”,DisplayName =“关于我们”,Active = false - >这应该更新。
3 - UrlName =“关于”,DisplayName =“关于测试”,Active = false - >这应该更新。
重要提示:4 - UrlName =“newnotexist”,DisplayName =“关于测试”,Active = false - > 这应该更新UrlName并在更改时休息。
5 - UrlName =“Contact”,DisplayName =“关于测试”,Active = false - > 这不应该更新并生成错误。
我希望你明白我想做什么。
答案 0 :(得分:26)
根据更新的问题,如果我理解正确,我认为此解决方案适合您。
var urlNameExists = _sb.Any(x => x.UrlName == urlName && x.Id != currentEditId);
if (urlNameExists)
throw Exception("A record with that UrlName already exists");
TryUpdateModel(existingMenu);
_menu.Add();
答案 1 :(得分:4)
bool alreadyInDb = (from p in _db.SubMenus where p.UrlName = urlName select p).Count() > 0;
if (alreadyInDb)
{
bool shouldAddRecord = (from p in _db.SubMenus where p.DisplayName == displayName && p.Active == active select p).Count() == 0;
if (shouldAddRecord)
{
TryUpdateModel(existingMenu);
_menu.Add();
}
}
答案 2 :(得分:3)
private void Update(string urlName, string display, bool active)
{
item = db_.SubMenus.SingleOrDefault(x => x.UrlName == urlName);
if (item == null)
{
// Save new item here
}
else
{
if (item.DisplayName == display && item.Active == active)
{
// Error, fields haven't changed and url already in db
}
else
{
// Save because fields have changed
}
}
}
希望这会有所帮助!!