【问题标题】:LINQ TO ENTITY cannot compare to enumeration typesLINQ TO ENTITY 无法与枚举类型进行比较
【发布时间】:2023-03-08 03:44:01
【问题描述】:

下面是枚举叶子

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.Annual 但它不起作用。 LINQ 查询引发以下异常:

System.NotSupportedException HResult=0x80131515 消息=无法创建“System.Object”类型的常量值。此上下文仅支持原始类型或枚举类型。

【问题讨论】:

标签: c# asp.net-mvc entity-framework enums linq-to-entities


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    假设您的 Profileid 是一个使用 == 的 int 应该可以使其工作而无需更改逻辑或遇到案例问题。

    【讨论】:

    • 它确实支持 Equals,我之前使用 Equals 的代码正在工作,并且在比较字符串类型值时更好。顺便说一句,我解决了它,我只是意识到我的 Profileid 是一个字符串类型,这就是它保持抛出异常的原因。您的评论“假设我的 Profileid 是 int”提醒我检查它。感谢您的帮助。
    • @lolipop 在 C# 中,Equals== 对于 string 和大多数其他类型将是相同的。最大的区别是如果类型不匹配(我想你会用== 得到更好的错误消息)。同样对于 Linq to SQL,它无论如何都会被转换为 SQL。
    猜你喜欢
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多