LINQ TO ENTITY 无法与枚举类型进行比较



下面是枚举叶子

public enum Leaves
{
Annual = 0,
Medical = 1,
Hospitalization = 2,
Unpaid = 3
}

下面是 linq 查询

public ActionResult ApproveLeave(int? id)
{
if (id == null)
return View();
LeaveApplication leaveApplication = db.LeaveApplication.Find(id);
if (leaveApplication == null)
return HttpNotFound();
leaveApplication.Status = "Approved";
if (ModelState.IsValid)
{
db.Entry(leaveApplication).State = EntityState.Modified;
Leaves leavesType = (Leaves)Enum.Parse(typeof(Leaves), leaveApplication.LeaveType.ToString());
var lb = (from t in db.LeaveBalance
select t)
.Where(t => t.LeaveType == leavesType && t.Profileid.Equals(id))
.FirstOrDefault();
lb.Taken++;
lb.Balance--;
db.SaveChanges();
return RedirectToAction("Index");
}
return View();
}

我什至尝试使用Leaves.Year,但它不起作用。 LINQ 查询引发以下异常:

System.NotSupportedException HResult=0x80131515 Message=无法创建类型为"System.Object"的常量值。在此上下文中仅支持基元类型或枚举类型。

Equals在 Linq2ToEntity 中不受支持,您应该改用双等号:

var lb = (from t in db.LeaveBalance select t)
.Where(t => t.LeaveType == leavesType && t.Profileid == id)
.FirstOrDefault();

假设您的 Profileid 是一个使用 == 的 int 应该可以在不更改逻辑或遇到案例问题的情况下工作。

该问题与Enum类型无关。不能将 Linq 的Equals用于实体。因此,修改您的查询;

var lb = (from t in db.LeaveBalance
select t)
.Where(t => t.LeaveType == leavesType && t.Profileid == id)
.FirstOrDefault();

最新更新