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

时间:2011-06-10 01:08:32

标签: c# linq

我有3个字段:urlNamedisplayNameactive。这是检查编辑记录。我想在这里做的是检查UrlName在Db中是唯一的,但与此同时,如果用户已经保存了Url但更改了DisplayNameActive,则记录应该更新

任何人都告诉我如何解决这个问题。

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 - > 这不应该更新并生成错误。

我希望你明白我想做什么。

3 个答案:

答案 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
        }
    }
}

希望这会有所帮助!!