强制转换为值类型';枚举';失败,因为具体化的值为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的类型
更新了问题
如果检索到的值为空,您可以在查询中进行检查:
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的类型公开属性HasValue
和Value
,允许您检查是否已分配了实际的有效值。