I've seen lots of questions on this topic, but I haven't been able to sort through any of them that actually solve the issue I'm seeing. I have an activities entity that tracks which employee it is assigned to as well as which employee created the record and updated it. If I remove the `where a.AssignedEmployee == currentUser' line of code, I don't get the run time error below.
Unable to create a constant value of type 'DataModels.Employee'. Only primitive types or enumeration types are supported in this context.
var query = from a in db.Activities where a.AssignedEmployee == currentUser where a.IsComplete == false orderby a.DueDate select a; return View(query.ToList());
@model IEnumerable<Data.DataModels.Activity> ..........
My guess is that error indicates that EF cannot translate the equality operator for
Employee to SQL (regardless of whether you're assuming referential equality or an overridden
== operator). Assuming the
Employee class has a unique identifier try:
var query = from a in db.Activities where a.AssignedEmployeeId == currentUser.Id where a.IsComplete == false orderby a.DueDate select a; return View(query.ToList());
It doesn't like the fact that you're trying to convert a whole object equality into a database query. You can only do entity framework queries using constant values, much like how you would do SQL queries. The way to solve this would be to compare the IDs to see if the AssignedEmployee's ID is the same as the current user's ID in the employee table.
As a side note, if the
currentUser object that you're tracking isn't of the Employee type you might want to consider caching the corresponding Employee record of that user to better be able to reference it in later queries. That would be a lot better than trying to go through that table constantly. (Again this would only affect you if it is, in fact, in a different table)