So I am trying to clean up some of my code because I dont want to add 30 extra lines of code for something I will be repeating often. But I cannot seem to get it to work properly.I am using Entity Framework to get the records from my database and then trying to pass that IQueryable to a helper method to do the work and pass an IQueryable back to the initial variable. Then after that the method finishes with converting to a DataSourceResult for Telerik's Grid. The reason i think it is the helper method that is causing the issue is because I can put this all in the controller method and it works perfectly fine. But when I try to split it out, then it stops working and throws errors. So i must be doing something wrong.
Helper Method:
Controller that calls to the method:
Here is the output when the error occurs:
And here is the Razor code if it helps any...
Please help. Thanks in advance.
Helper Method:
public static IQueryable<DetailedTicketModel> GetDetailedTicketModels(IQueryable<TICKET> tickets) { using (var ctx = new GuardianContext()) { var detailedTickets = tickets.Select(v => new DetailedTicketModel() { Id = v.ID, RequesterId = v.REQUESTER_ID, RequesterName = v.REQUESTER_NAME, Phone = v.PHONE, Location = v.LOCATION, Source = v.SOURCE, PersonAssigned = v.PERSON_ASSIGNED, Created = v.CREATED, Updated = v.UPDATED, DeptId = v.DEPT_ID, DeptName = ctx.DEPARTMENTS.FirstOrDefault(t => t.ID == v.DEPT_ID).NAME, TopicId = v.TOPIC_ID, TopicName = ctx.TICKET_TOPICS.FirstOrDefault(t => t.ID == v.TOPIC_ID).NAME, StatusId = v.STATUS_ID, StatusName = ctx.TICKET_STATUSES.FirstOrDefault(t => t.ID == v.STATUS_ID).NAME, PriorityId = v.PRIORITY_ID, PriorityName = ctx.TICKET_PRIORITIES.FirstOrDefault(t => t.ID == v.PRIORITY_ID).NAME, PriorityHexColor = ctx.TICKET_PRIORITIES.FirstOrDefault(t => t.ID == v.PRIORITY_ID).HEX_COLOR, TicketEvents = ctx.TICKET_EVENTS.Where(t => t.TICKET_ID == v.ID).OrderBy(t => t.CREATED), RequestBody = ctx.TICKET_EVENTS.OrderBy(t => t.CREATED).FirstOrDefault(t => t.TICKET_ID == v.ID).BODY, RequestFormat = ctx.TICKET_EVENTS.OrderBy(t => t.CREATED).FirstOrDefault(t => t.TICKET_ID == v.ID).FORMAT, }); return detailedTickets; } }Controller that calls to the method:
public ActionResult UnassignedTickets_Read([DataSourceRequest]DataSourceRequest request) { Debug.WriteLine("UnassignedTickets_Read"); using (var ctx = new GuardianContext()) { var detailedTickets = TicketHelper.GetDetailedTicketModels(ctx.TICKETS.Where(v => v.PERSON_ASSIGNED == null)); //PROBLEM HAPPENS AT THE NEXT STATEMENT var result = detailedTickets.ToDataSourceResult(request, ticket => new { ticket.Id, ticket.RequesterId, ticket.RequesterName, ticket.Created, ticket.RequestBody, ticket.RequestFormat }); return Json(result); } }Here is the output when the error occurs:
A first chance exception of type 'System.NotSupportedException' occurred in EntityFramework.dllA first chance exception of type 'System.NotSupportedException' occurred in EntityFramework.dllA first chance exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dllA first chance exception of type 'System.NotSupportedException' occurred in System.Web.Mvc.dllA first chance exception of type 'System.NotSupportedException' occurred in System.Web.Mvc.dllAnd here is the Razor code if it helps any...
@if (ViewBag.UnassignedTicketsAvailable){ <h3 class="page-header">Unassigned Tickets</h3> @(Html.Kendo().Grid<Guardian.ViewModels.DetailedTicketModel>() .Name("unassigned_grid") .Columns(columns => { columns.Bound(ticket => ticket.Id).Visible(false); columns.Bound(ticket => ticket.RequesterId); columns.Bound(ticket => ticket.RequesterName); columns.Bound(ticket => ticket.Created); }) .DataSource(dataSource => dataSource.Ajax().Read(read => read.Action("UnassignedTickets_Read", "Ticket")) ) .ClientDetailTemplateId("client-template") .Sortable() .Pageable() .Filterable() )}<script id="client-template" type="text/kendo-tmpl"> @(Html.Raw("<div style\"padding: 0.4em;\">#=RequestBody#</div>"))</script><script> function dataBound() { this.expandRow(this.tbody.find("tr.k-master-row").first()); }</script>Please help. Thanks in advance.
