Unable to cast the type 'System.Int64' to type 'System.Object'. LINQ to Entities only supports casting Entity Data Model primitive types

c#, c#-4.0, entity-framework-4, visual-studio-2010

Solution

Resolved

I had two issues, each of them would cause this error:

1. I was accessing NULLABLE entity properties without checking if they have value or not. Say CustomerID is NULLABLE, so my query became something like this!

    var query = from c in this.ObjectContext.CallLogs                        
                select new
                {
                    CallDescription = c.CallDescription,
                    CustomerID = c.CustomerID.HasValue ? c.CustomerID.Value : 0,
                    CustomerName = c.CustomerID.HasValue ? c.Customer.Name : ""
                };

    if (maximumRows > 0)
        query = query.Skip(startRowIndex).Take(maximumRows);

    return query.ToList<object>();

So just check any null value by its HasValue property before accessing it (2nd line in select portion).

2. I Was also trying to convert integer to string within the select statement. So i just decided that conversion in HTML instead of directly doing it here. This solved my issues.

Hope this helps someone!

Problem

I have created a EF 4 & C# to get some data. I am using Linq. Its as follows: ``` public List<object> GenerateCallTrackingReport(int startRowIndex, int maximumRows, int createdByID) { var query = from c in this.ObjectContext.CallLogs select new { CallLogID = c.CallLogID, DomainName = c.CallDomain.FullName, CreatedByID = c.CreatedByID, CreatedBy = c.CreatedByUser.FirstName + " " + c.CreatedByUser.LastAccessIPN, CalledOn = c.CallDate, IssueResolutionTime = c.IssueResolutionTime, CallType = c.CallType.FullName, CallDescription = c.CallDescription, CustomerName = (c.CustomerID > 0 ? c.Customer.FirstName + " " + c.Customer.LastAccessIPN : c.TempCaller.FirstName + " " + c.TempCaller.LastName), CustomerEmail = (c.CustomerID > 0 ? c.Customer.Email : string.Empty), CustomerResponse = c.Response.FullName, IsPending = c.IsPending, NeedFurtherContact = c.NeedFurtherContact }; if (createdByID > 0) query = query.Where(c => c.CreatedByID == createdByID); if (maximumRows > 0) query = query.Skip(startRowIndex).Take(maximumRows); return query.ToList<object>(); } ``` This is causing the following error: ``` Unable to cast the type 'System.Int64' to type 'System.Object'. LINQ to Entities only supports casting Entity Data Model primitive types. ``` Any Idea y am i getting this error?? Thanks

Original source