LINQ查询问题需要检查是否存在

问题描述

| 我有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();
这就是我要实现的 我的其他2个值应添加到Query displayName和Active中。假设\“ Contact \” UrlName已经在数据库中。我正在从下拉列表加载值,返回UrlName = \“ About \”,displayName = \“ About Us \”,Active = true。现在编辑记录。这是要匹配的条件。 1-UrlName = \“ About \”,displayName = \“ About Test \”,Active = true->应该更新。 2-UrlName = \“关于\”,displayName = \“关于我们\”,活动=否->应该更新。 3-UrlName = \“ About \”,displayName = \“ About Test \”,Active = false->应该更新。 重要说明:4-UrlName = \“ newnotexist \”,displayName = \“ About test \”,Active = false->这应更新UrlName,并在更改后休息。 5-UrlName = \“ Contact \”,displayName = \“ About Test \”,Active = false->这不应更新并生成错误。 希望您能理解我的想法。     

解决方法

        基于更新后的问题,如果我对它的理解正确,我认为此解决方案将为您服务。
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();
    ,        
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();
    }
}
    ,        
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
        }
    }
}
希望这可以帮助!!