强制转换为值类型';枚举';失败,因为具体化的值为null.结果类型';s参数或查询必须使用可为nul

本文关键字:类型 查询 参数 nul 具体化 失败 枚举 转换 因为 null 结果 | 更新日期: 2024-10-21 10:52:41

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

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

枚举:

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 上收到这个错误

转换为值类型"Enum"失败,因为具体化的值为无效的结果类型的泛型参数或查询必须使用可为null的类型。

请让我知道如何为参数设置可为null的类型

更新了问题

强制转换为值类型';枚举';失败,因为具体化的值为null.结果类型';s参数或查询必须使用可为nul

如果检索到的值为空,您可以在查询中进行检查:

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();

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

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

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

由于枚举是一种值类型,因此它不能是null。解决方法是使用一个可为null的类型:

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

或者简写语法:

public Status? Status { get; set; }

这可以用于任何值类型(int、bool、double等)

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