【问题标题】:Linq Data Can Not Be Null By Using Stored Procedure使用存储过程,Linq 数据不能为空
【发布时间】:2013-10-03 20:03:27
【问题描述】:
我尝试使用带有 linq 的存储过程。
如果result.FirstOrDefault().CustomerName 为空,我得到以下异常,
NullReferenceException 未处理
对象引用未设置为对象的实例
使用以下代码:
var result = context.sp_CustomerInformation(CustomerId).ToList();
var MyCustomerName = result.FirstOrDefault().CustomerName;
我哪里做错了?
【问题讨论】:
标签:
c#
sql
linq
stored-procedures
entity
【解决方案1】:
您遇到了该错误,因为FirstOrDefault() 将在结果不匹配时返回类型的默认值。在这种情况下,默认值为 null。所以你试图访问一个空对象的属性,这将导致NullReferenceException。
你需要这样的东西:
var result = context.sp_CustomerInformation(CustomerId).ToList();
var object = result.FirstOrDefault();
var MyCustomerName = "";
if(object != null)
MyCustomerName = object.CustomerName;
else
// do something here if there were no results
对于它的价值,您也可以结合您的 result 查询:
var result = context.sp_CustomerInformation(CustomerId).FirstOrDefault();
而不是ToList(),它将返回所有匹配的记录。 FirstOrDefault 只会获得第一条记录。然后您就可以使用result 代替上面示例中的object。