我在以下实体中定义了变量状态:
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
收到此错误转换为值类型“枚举”失败,因为具体化值为 空值。结果类型的泛型参数或查询必须使用 可空的类型。
请告诉我如何设置参数的可空类型
更新了问题
答案 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等)执行此操作。
可空类型公开属性HasValue
和Value
,允许您检查是否已分配实际有效值。