LINQ to Entities中不支持指定的类型成员

我有一个名为StatusTypes的枚举类型

public enum StatusTypes { Open = 1, Allocated = 2, WorkInProgress = 3, WaitingOnRequestor = 4, WaitingOnThirdParty = 5, Monitoring = 6, Testing = 7, OnHold = 8, Complete = 9, SignedOff = 10, Reopened = 11 } 

我正试图在我的存储库中使用它….

 public IQueryable GetAllOutstandingIncidents() { return from i in db.Incidents where i.Status != Types.StatusTypes.SignedOff && i.Status != Types.StatusTypes.Complete && i.DeletedDateTime != null orderby i.DueDateTime select i; } 

…然后在我看来使用它……

        /   /         

…但是我收到错误“LINQ to Entities不支持指定的类型成员’状态’。仅支持初始值设定项,实体成员和实体导航属性。”

任何帮助感激不尽!

更新显示incident.cs

 public class Incident { public int IncidentID { get; set; } public DomainUser Caller { get; set; } [Display(Name = "Caller Type")] public Types.CallerTypes CallerType { get; set; } public Service Service { get; set; } public Category Category { get; set; } public Subcategory Subcategory { get; set; } public string Title { get; set; } [Display(Name = "Problem Description")] public string ProblemDescription { get; set; } public Equipment Equipment { get; set; } public Types.ImpactTypes Impact { get; set; } public Types.UrgencyTypes Urgency { get; set; } [Display(Name = "Priority")] public Types.PriorityTypes Priority { get; set; } [Display(Name="Estimated time for completion")] public DateTime? DueDateTime { get; set; } [Display(Name="Date/Time")] public DateTime? CreatedDateTime { get; set; } public DomainUser CreatedBy { get; set; } [Display(Name = "Allocated To")] public HelpDeskMember AllocatedTo { get; set; } public DateTime? AllocatedDateTime { get; set; } public DateTime? ClosedDateTime { get; set; } public int? ClosedBy { get; set; } public DateTime? ReopenedDateTime { get; set; } public int? ReopenedBy { get; set; } public DateTime? DeletedDateTime { get; set; } public HelpDeskMember DeletedBy { get; set; } public Decimal? EstimatedInternalCost { get; set; } public Decimal? EstimatedResources { get; set; } public Decimal? RealInternalCost { get; set; } public Decimal? EstimatedExternalCost { get; set; } public Decimal? RealExternalCost { get; set; } public Decimal? EstimatedTotalCost { get; set; } public Decimal? RealTotalCost { get; set; } public string CostCode { get; set; } public string TimeRequired { get; set; } public string ActualTimeTaken { get; set; } public Types.StatusTypes Status { get; set; } public string Solution { get; set; } public bool UserSignedOff { get; set; } public bool OverdueEmailSent { get; set; } public bool EscalatedEmailSent { get; set; } public ICollection Notes { get; set; } public ICollection Attachments { get; set; } public ICollection History { get; set; } public Incident() { Notes = new List(); Attachments = new List(); History = new List(); } } 

正如我已经说过的那样尝试将两个部分都转换为int类型

 public IQueryable GetAllOutstandingIncidents() { return from i in db.Incidents where (int)i.Status != (int)Types.StatusTypes.SignedOff && (int)i.Status != (int)Types.StatusTypes.Complete && i.DeletedDateTime != null orderby i.DueDateTime select i; } 

UPDATE

这是Code First的一个function。 你应该做以下。 改变你的课程:

 [Column("Status", TypeName = "int")] public int InternalStatus { get; set; } public StatusTypes Status { get; set; } 

并使用以下查询:

 context.Incidents.Where(i => i.InternalStatus == (int)StatusTypes.Allocated); 

我在这里找到了这个信息

您还可以使用.AsEnumerable()转换为LINQ To Object:

 public IQueryable GetAllOutstandingIncidents() { return from i in db.Incidents.AsEnumerable() where i.Status != Types.StatusTypes.SignedOff && i.Status != Types.StatusTypes.Complete && i.DeletedDateTime != null orderby i.DueDateTime select i; } 

根据您的需要,它可能是一个不太好的解决方案:它不是从数据库中拉出一个对象,而是在调用时拉取所有对象.AsEnumerable()。

试试这个

 return from i in db.Incidents where i.Status != (int)Types.StatusTypes.SignedOff && i.Status != (int)Types.StatusTypes.Complete && i.DeletedDateTime != null orderby i.DueDateTime select i; 

在您的Incident类中:

 private int statusId; public Types.StatusTypes Status { get { return (Types.StatusTypes)statusId; } set { statusId = (int)value; } } public Int StatusId { get { return statusId; } } 

然后在你的方法:

 public IQueryable GetAllOutstandingIncidents() { int signedOffStatusType = (int)Types.StatusTypes.SignedOff; int completeStatusType = (int)Types.StatusTypes.Complete; return from i in db.Incidents where i.StatusId != signedOffStatusType && i.StatusId != completeStatusType && i.DeletedDateTime != null orderby i.DueDateTime select i; } 

或者使用方法语法:

 public IQueryable GetAllOutstandingIncidents() { int signedOffStatusType = (int)Types.StatusTypes.SignedOff; int completeStatusType = (int)Types.StatusTypes.Complete; return db.Incidents.Where(i => i.StatusId != signedOffStatusType && i.StatusId != completeStatusType && i.DeletedDateTime != null) .OrderBy(i => i.DueDateTime); }