匿名数组接受 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,
                        };

如果 ProductTypeIdInquiryOrder 中有空值 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,
};