匿名数组接受 int 的空值
Anonymous array accepting null values for int
询价订单模型
public class InquiryOrder
{
[Key]
public int InquiryOrderId { get; set; }
public string InquiryOrderName { get; set; }
[ForeignKey("ProductType")]
public int? ProductTypeId { get; set; }
public virtual ProductType ProductType { get; set; }
}
查询订单控制器
var displayedInquiryOrders = filteredInquiryOrders.Skip(iDisplayStart).Take(iDisplayLength);
var result = from c in displayedInquiryOrders .AsEnumerable()
select new[] {
Convert.ToString(c.InquiryOrderId),
c.InquiryOrderName,
c.ProductType.ProductTypeName,
};
如果 ProductTypeId
在 InquiryOrder
中有空值 table 我从数组中的 c.ProductType.ProductTypeName
得到这个错误 Object reference not set to an instance of an object
。如何调整此数组,使其接受 int 的空值。谢谢!
您可能需要使用三元运算符
var displayedInquiryOrders = filteredInquiryOrders.Skip(iDisplayStart).Take(iDisplayLength);
var result = from c in displayedInquiryOrders .AsEnumerable()
select new[] {
Convert.ToString(c.InquiryOrderId),
c.InquiryOrderName,
c.ProductType != null ? c.ProductType.ProductTypeName : null, //if not null, then add the product type, otherwise add null
};
在 C#6.0 中,我认为你可以通过 ?.
var displayedInquiryOrders = filteredInquiryOrders.Skip(iDisplayStart).Take(iDisplayLength);
var result = from c in displayedInquiryOrders .AsEnumerable()
select new[] {
Convert.ToString(c.InquiryOrderId),
c.InquiryOrderName,
c.ProductType?.ProductTypeName
};
如果 ProductTypeId
为 null,这意味着 Entity Framework 无法延迟加载实体的产品类型,因为它不存在。
这意味着当您调用 c.ProductType.ProductTypeName
时,c.ProductType
为空,并且在尝试获取 ProductTypeName
值时得到 NullReferenceException
。
您可以通过多种方式解决此问题。如果您使用的是最新版本的 C#,则可以使用 Null-conditional 运算符 (?.) https://msdn.microsoft.com/en-us/library/dn986595.aspx
select new[] {
Convert.ToString(c.InquiryOrderId),
c.InquiryOrderName,
c.ProductType?.ProductTypeName,
};
如果没有,你可以使用三元运算符来执行相同的功能:
select new[] {
Convert.ToString(c.InquiryOrderId),
c.InquiryOrderName,
c.ProductType != null ? c.ProductTypeProductTypeName : string.Empty,
};
询价订单模型
public class InquiryOrder
{
[Key]
public int InquiryOrderId { get; set; }
public string InquiryOrderName { get; set; }
[ForeignKey("ProductType")]
public int? ProductTypeId { get; set; }
public virtual ProductType ProductType { get; set; }
}
查询订单控制器
var displayedInquiryOrders = filteredInquiryOrders.Skip(iDisplayStart).Take(iDisplayLength);
var result = from c in displayedInquiryOrders .AsEnumerable()
select new[] {
Convert.ToString(c.InquiryOrderId),
c.InquiryOrderName,
c.ProductType.ProductTypeName,
};
如果 ProductTypeId
在 InquiryOrder
中有空值 table 我从数组中的 c.ProductType.ProductTypeName
得到这个错误 Object reference not set to an instance of an object
。如何调整此数组,使其接受 int 的空值。谢谢!
您可能需要使用三元运算符
var displayedInquiryOrders = filteredInquiryOrders.Skip(iDisplayStart).Take(iDisplayLength);
var result = from c in displayedInquiryOrders .AsEnumerable()
select new[] {
Convert.ToString(c.InquiryOrderId),
c.InquiryOrderName,
c.ProductType != null ? c.ProductType.ProductTypeName : null, //if not null, then add the product type, otherwise add null
};
在 C#6.0 中,我认为你可以通过 ?.
var displayedInquiryOrders = filteredInquiryOrders.Skip(iDisplayStart).Take(iDisplayLength);
var result = from c in displayedInquiryOrders .AsEnumerable()
select new[] {
Convert.ToString(c.InquiryOrderId),
c.InquiryOrderName,
c.ProductType?.ProductTypeName
};
如果 ProductTypeId
为 null,这意味着 Entity Framework 无法延迟加载实体的产品类型,因为它不存在。
这意味着当您调用 c.ProductType.ProductTypeName
时,c.ProductType
为空,并且在尝试获取 ProductTypeName
值时得到 NullReferenceException
。
您可以通过多种方式解决此问题。如果您使用的是最新版本的 C#,则可以使用 Null-conditional 运算符 (?.) https://msdn.microsoft.com/en-us/library/dn986595.aspx
select new[] {
Convert.ToString(c.InquiryOrderId),
c.InquiryOrderName,
c.ProductType?.ProductTypeName,
};
如果没有,你可以使用三元运算符来执行相同的功能:
select new[] {
Convert.ToString(c.InquiryOrderId),
c.InquiryOrderName,
c.ProductType != null ? c.ProductTypeProductTypeName : string.Empty,
};