【发布时间】:2017-10-23 23:27:31
【问题描述】:
如何以NewUnitPhaseStatus 作为枚举返回IEnumerable?
在 SQL 中,值“NewUnitPhaseStatus”存储为 int。如果我只是返回查询,那么当我尝试提取该值时,它只是说 DBcontext 已被处置。但是如果我尝试将查询结果转换为列表,那么它说 int 不能转换为类型 NewUnitPhaseStatus(枚举类型)。
public IEnumerable<UnitPhaseLog> GetAllForUnitPhase(long unitPhaseId)
{
using (var db = new DbContext(_connStringKey))
{
var querys = from s in db.UnitPhaseLogs
where s.UnitPhaseId == unitPhaseId
select s;
return querys;
}
}
如果使用 foreach 语句将每一行转换为枚举,则会出错,因为 var 查询属于 UnitPhaseLog 类,且 NewUnitPhaseStatus 等于枚举。
错误信息:
如果有人尝试将结果转换为列表。
“UnitPhaseLog”上的“NewUnitPhaseStatus”属性无法设置为“System.Int64”值。您必须将此属性设置为“Core.UnitPhaseStatus”类型的非空值。
如果尝试自己返回查询结果:
操作无法完成,因为 DbContext 已被释放。
代码:
public enum UnitPhaseStatus
{
[Display(Name = "No Status")]
NoStatus,
[Display(Name = "Not Ready")]
NotReady,
[Display(Name = "Materials Needed")]
MaterialsNeeded,
[Display(Name = "Ready For Work")]
ReadyForWork,
[Display(Name = "Work In Progress")]
WorkInProgress,
[Display(Name = "Ready")]
ReadyForQc,
[Display(Name = "Approved")]
Approved,
[Display(Name = "Rejected")]
Rejected,
}
【问题讨论】:
-
你在说这条线?
UnitPhaseStatus UnitPhaseStatus = query.NewUnitPhaseStatus; -
请显示定义 UnitPhaseStatus 的代码。您的枚举值应与 SQL 定义匹配。
-
看看@DigiFriend 的回答。在您的枚举定义中,您必须添加 = VALUE: NoStatus = 0, NotReady = 1, MaterialsNeeded = 2 WHERE 0,1 和 2 将匹配 SQL 列中的值。
-
有什么理由不能简单地返回
querys? -
您的 ORM(实体框架?)为您进行转换。
标签: c# sql entity-framework