如果表中不存在记录如何返回false

Posted

技术标签:

【中文标题】如果表中不存在记录如何返回false【英文标题】:how to return false if no records exist in table 【发布时间】:2014-03-09 10:22:41 【问题描述】:

想检查ClientAccessCode表中是否存在任何记录,如果不存在则返回false...

if (!CheckAccessCodeExists())

    Console.WriteLine("Client Access code does not exist");
    throw new ConfigurationErrorsException("Client Access code does not exist");


private static bool CheckAccessCodeExists()

    using (EPOSEntities db = new EPOSEntities())
    
        ClientAccountAccess clientAccess = db.ClientAccountAccesses
                .OrderByDescending(x => x.Id)
                .Take(1)
                .Single();

        if (clientAccess != null)
        
            return true;
        
        return false;
    

//这是标记序列在lamba表达式中不包含任何元素,那我怎么才能返回false呢?也许使用 .Any() ?

谢谢

编辑 非常感谢大家的帮助,我现在标记答案,如果我有另一个问题

ClientAccountAccess clientAccess = db.ClientAccountAccesses
                  .OrderByDescending(x => x.Id)
                  .Take(1)
                  .Single();

if (clientAccess != null)

    db.DeleteObject(clientAccess);

我怎样才能把它重构成更整洁的东西

if (db.ClientAccountAccesses.Any())

    db.DeleteObject(//what does in here do I have to use above code to get record to delete?);

【问题讨论】:

只删除所有内容? 考虑到表中只有一条记录,是的,删除记录,但不是实际的表 @John 查看更新的答案 【参考方案1】:

问题是Single 期望集合中有至少一项,如果找不到 1 则抛出异常。如果您的收藏可能没有记录,那么您应该使用 SingleOrDefault - 这将返回您正在使用的类型的默认值,在您的情况下,这将返回 null

ClientAccountAccess clientAccess = db.ClientAccountAccesses
    .OrderByDescending(x => x.Id)
    .Take(1)
    .SingleOrDefault();

if (clientAccess != null)

    db.DeleteObject(clientAccess);

【讨论】:

是的,您正在阅读问题的文字内容并深入到问题的核心。我要补充一点,您当然可以将 Single 包装在 try-catch 中(我不推荐这种方法,但很高兴知道您的选择)。 似乎您进行了 4 次查询以执行删除单个记录,也没有 db.SaveChanges() 方法。 @NikolaMitev 请指出 4 个查询,因为我只看到 1 个(调用 SaveChanges 时为 2 个)?是的,我故意忽略了它,因为那不是我想要展示的内容【参考方案2】:
private static bool CheckAccessCodeExists()
    
        using (EPOSEntities db = new EPOSEntities())
        
            var item = db.ClientAccountAccesses.FirstOrDefault();
            if(item != null)
            
               db.Remove(item);
               db.SaveChanges(); 
               return true;                 
            

            return false;
        
    

【讨论】:

为您的编辑更新了解决方案。否决选民请发表评论。 啊对了,玩的时候更新了忘记换回来了。固定的。干杯。【参考方案3】:
    private static bool CheckAccessCodeExists()
    
        using (EPOSEntities db = new EPOSEntities())
        
            var item = db.ClientAccountAccesses.FirstOrDefault();
            if (item != null)
            
                db.DeleteObject(item);
                db.SaveChanges();
                return true;
                         
        
        return false;
    

【讨论】:

当您可以摆脱 2 次时执行 3 次查询似乎很浪费,这还会检查是否存在 any 记录,OP 正在检查是否存在 特定的记录已经存在。

以上是关于如果表中不存在记录如何返回false的主要内容,如果未能解决你的问题,请参考以下文章

SQL如何选择表中不存在的记录?

如果 iPhone 应用程序中不存在,则在表中插入记录

查询输出表中不存在的值

如果右侧表中不存在日期,则使用 LEFT JOIN 返回 NULL

如何从一个表中选择另一张表中不存在的所有记录?

如何从一个表中选择另一张表中不存在的所有记录?