LINQ TO ENTITY не может сравниваться с типами перечисления - PullRequest
0 голосов
/ 27 мая 2018

Ниже перечислены enum Leaves

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.Anual, но он не работает.LINQ QUERY ВЫНОСИТСЯ ПО СЛЕДУЮЩЕМУ ИСКЛЮЧЕНИЮ:

System.NotSupportedException HResult = 0x80131515 Сообщение = Невозможно создать постоянное значение типа 'System.Object'.В этом контексте поддерживаются только примитивные типы или типы перечисления.

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Проблема не относится к типу Enum.Вы не можете использовать Equals для Linq для сущностей.Итак, измените ваш запрос;

var lb = (from t in db.LeaveBalance
          select t)
          .Where(t => t.LeaveType == leavesType && t.Profileid == id)
          .FirstOrDefault();
0 голосов
/ 27 мая 2018

Equals не поддерживается в Linq2ToEntity. Вместо этого следует использовать двойное равенство:

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

Предполагая, что ваш Profileid является целым числом с использованием ==, он должен работать без изменения логики или выполнениявопросы по делу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...