转换为价值类型' Enum'失败,因为物化值为null。结果类型的参数或查询必须使用可空类型

时间:2015-03-06 06:56:39

标签: c# .net asp.net-mvc linq

我在以下实体中定义了变量状态:

public class Item
    {
        public string ItemNumber { get; set; }
        public string ItemDescription { get; set; }
        public int ItemId { get; set; }
        public Status status { get; set; }
    }

Enum:

public enum Status
    {
        Approved = 1,
        Received = 2,
        Issued = 3,
        PendingApproval = 4,
        Rejected = 5,
        Invoiced = 6,
        Transfered = 7
    }

这是linq:

IEnumerable<Item> rpo = (from ro in _db.rpo.Where(c=> c.Id == WorkingId))
                         select new Items 
                         {
                           ItemId = ro.Id
                           ItemDescription = ro.Description
                           ItemNum = ro.Number
                           ItemStatus = ro.Status
                         }.ToList();

我在linq

收到此错误
  

转换为值类型“枚举”失败,因为具体化值为   空值。结果类型的泛型参数或查询必须使用   可空的类型。

请告诉我如何设置参数的可空类型

更新了问题

2 个答案:

答案 0 :(得分:2)

如果检索到的值为null,您可以检查查询:

IEnumerable<Item> rpo = (from ro in _db.rpo.Where(c=> c.Id == WorkingId))
                         select new Items 
                         {
                           ItemId = ro.Id
                           ItemDescription = ro.Description
                           ItemNum = ro.Number
                           ItemStatus = ro.Status ?? Status.None
                         }.ToList();

如果您的枚举中有新值,。或者您选择一个现有值。

??检查??前面的变量是否为空。如果不是,请使用该值,否则使用??后指定的值。更多信息here

当然,你的 ro.Status 必须是Nullable才能检查它是否为空。

答案 1 :(得分:1)

由于枚举是值类型,因此不能是null。解决这个问题的方法是改为使用可空类型:

public System.Nullable<Status> Status { get; set; }

或简写语法:

public Status? Status { get; set; }

可以对任何值类型(int,bool,double等)执行此操作。

可空类型公开属性HasValueValue,允许您检查是否已分配实际有效值。