如果表中不存在记录如何返回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的主要内容,如果未能解决你的问题,请参考以下文章