我用 lambda 从数据库中检索数据
var obj = DBContext.MyTable.Where(x => x.ID == 2).SingleOrDefault().MyColumn;
实际上,在MyTable
2 中没有 ID。
所以我得到了这个消息。
你调用的对象是空的。
如何正确验证它?
只需将查询结果捕获到单独的变量中,并在访问其属性之前检查是否找到任何项目:
var yourItem = DBContext.MyTable.Where(x => x.ID == 2).SingleOrDefault();
if (yourItem != null)
obj = yourItem.MyColumn;
顺便说一句,您可以将谓词传递给SingleOrDefault
方法:
var yourItem = DBContext.MyTable.SingleOrDefault(x => x.ID == 2);
您也可以在申请前选择您的房产SingleOrDefault
var obj = DBContext.MyTable.Where(x => x.ID == 2)
.Select(x => x.MyColumn)
.SingleOrDefault();
另一种方法是使用“null-coalescing”??
运算符,如果第一个参数为空,它将使用第二个参数。
var obj = (DBContext.MyTable.FirstOrDefault(x => x.ID == 2) ?? new MyTable()).MyColumn;
您必须先检查返回值是否为空,然后访问它:
var temp = DBContext.MyTable.Where(x => x.ID == 2).SingleOrDefault();
if (temp != null)
{
var obj = temp.MyColumn;
}
不是最优雅的方式,但我不知道其他方式。
我更喜欢 DefaultIfEmpty() 而不是 .FirstOrDefault()
这样做我们可以避免如果检查
例如
var obj = DBContext.MyTable.Where(x => x.ID == 2).DefaultIfEmpty().MyColumn;
或者
var obj = DBContext.MyTable.Where(x => x.ID == 2).DefaultIfEmpty(string.Empty).MyColumn;
DefaultIfEmpty 的概念很简单:它将空集合替换为具有一个默认值的集合。
int 的默认值为 0。因此,List 上的 DefaultIfEmpty 产生一个具有一个零元素的 List。
希望能帮助到你。
var yourItem = DBContext.MyTable.Where(x => x.ID == 2).ToArray()
if( yourItem.Length > 0)
//do stuff