Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Query: IncludeResultOperator not implemented in some client eval cases #7187

Closed
dazinator opened this issue Dec 5, 2016 · 5 comments
Closed
Assignees
Labels
closed-fixed The issue has been fixed and is/will be included in the release indicated by the issue milestone. type-bug
Milestone

Comments

@dazinator
Copy link

dazinator commented Dec 5, 2016

Steps to reproduce

Ideally include a complete code listing that we can run to reproduce the issue.
Alternatively, you can provide a project/solution that we can run.

Unfortunately I can't post the complete code verbatim as its against the companies policy, however I will try to outline the problem.

The issue

The problem is that when I attempt to execute a query, I am getting a NotImplementedException.
The query runs perfectly if I omit the last bit (with the comment). The reason why I am now encountering this issue, is because I not only want to get back a page of results, but I also wanted to get back the total number of results in one roundtrip to the db. Knowing the total number of results is important if you want to calculate how many more pages there are!

 // territories the user belongs too are brought back into a list.
 var territoriesForUser = dbContext.TerritoryMaps.Include(tm => tm.Territory)
                    .Where(tm => tm.Territory != null && tm.Territory.CompanyId == companyId
                                                            && tm.UserId == userId && tm.TerritoryMapStatus == 0)
                                                        .Select(tm => tm.TerritoryId).ToList();

// Outlets for those territories are queried
 var outletsWithinTerritories =dbContext.TerritoryMaps
                    .Include(tm => tm.Territory)
                    .Include(tm => tm.Outlet)
                    .Where(tm => territoriesForUser.Contains(tm.TerritoryId)
                                                            && tm.OutletId != null && tm.TerritoryMapStatus == 0)
                                                        .Select(tm => tm.Outlet);

 // query is evaluated - Any() causes evaluation.
 if (!outletsWithinTerritories.Any())
                {
                    return;
                }

// This is the query that eventually causes NotImplementedException..
 var ordersForOutlets = (from o in outletsWithinTerritories
                                        join so in dbContext.SupplierOrders
                                        on o.OutletId equals so.OutletId
                                        where !so.IsDeleted && so.RedFlagValidationStatusId > 0
                                        select so);

// Add some further where clauses
 if (crit.OrderFromDate.HasValue)
                {
                    ordersForOutlets = ordersForOutlets.Where(e => c.OrderFromDate.Value.Date <= e.OrderDate.Date);
                }

                if (c.OrderToDate.HasValue)
                {
                    ordersForOutlets = ordersForOutlets.Where(e => c.OrderToDate.Value.Date >= e.OrderDate.Date);
                }

                if (c.RepUserId.HasValue)
                {
                    ordersForOutlets = ordersForOutlets.Where(e => e.SyncedUserId == c.RepUserId);
                }

// add sorting
  var orderedQueryable = ordersForOutlets.OrderBy((o) => o.OrderDate);

// add paging.
               var pagedQuery = orderedQueryable;
                if (crit.Page > 1)
                {
                    var amountToSkip = (crit.Page - 1) * crit.PageSize;
                    pagedQuery = pagedQuery.Skip(amountToSkip);
                }              

                pagedQuery = pagedQuery.Take(crit.PageSize);

// Add includes
 pagedQuery = pagedQuery
                                      .Include(o => o.Outlet)
                                      .ThenInclude(outlet => outlet.OutletMapSupplier)
                                      .Include(o => o.SyncedUser)
                                      .Include(o => o.SupplierOrderType);

// HERE --> pagedQuery.ToList() - runs fine

// THE FOLLOWING RESULTS IN NOTIMPLEMENTED EXCEPTION WHEN QUERY IS EXECUTED
  var grouped = pagedQuery.GroupBy(e => new { Total = orderedQueryable.Count() }).FirstOrDefault();              


Exception details:

Exception message: NotImplemented {"Microsoft.EntityFrameworkCore.Query.ResultOperators.Internal.IncludeResultOperator"}
Stack trace: at Microsoft.EntityFrameworkCore.Query.ResultOperatorHandler.HandleResultOperator(EntityQueryModelVisitor entityQueryModelVisitor, ResultOperatorBase resultOperator, QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.Internal.RelationalResultOperatorHandler.HandleResultOperator(EntityQueryModelVisitor entityQueryModelVisitor, ResultOperatorBase resultOperator, QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.VisitResultOperator(ResultOperatorBase resultOperator, QueryModel queryModel, Int32 index)
   at Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitResultOperator(ResultOperatorBase resultOperator, QueryModel queryModel, Int32 index)
   at Remotion.Linq.QueryModelVisitorBase.VisitResultOperators(ObservableCollection`1 resultOperators, QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.VisitQueryModel(QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitQueryModel(QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.Internal.SqlServerQueryModelVisitor.VisitQueryModel(QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.RelationalEntityQueryableExpressionVisitor.VisitSubQuery(SubQueryExpression expression)
   at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.ExpressionVisitorBase.Visit(Expression node)
   at Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.ReplaceClauseReferences(Expression expression, IQuerySource querySource, Boolean inProjection)
   at Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.CompileMainFromClauseExpression(MainFromClause mainFromClause, QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.VisitMainFromClause(MainFromClause fromClause, QueryModel queryModel)
   at Remotion.Linq.QueryModelVisitorBase.VisitQueryModel(QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.VisitQueryModel(QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitQueryModel(QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.Internal.SqlServerQueryModelVisitor.VisitQueryModel(QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.SqlTranslatingExpressionVisitor.VisitSubQuery(SubQueryExpression expression)
   at Remotion.Linq.Parsing.ThrowingExpressionVisitor.Visit(Expression expression)
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.SqlTranslatingExpressionVisitor.VisitNew(NewExpression expression)
   at Remotion.Linq.Parsing.ThrowingExpressionVisitor.Visit(Expression expression)
   at Microsoft.EntityFrameworkCore.Query.Internal.RelationalResultOperatorHandler.HandleGroup(HandlerContext handlerContext)
   at Microsoft.EntityFrameworkCore.Query.Internal.RelationalResultOperatorHandler.HandleResultOperator(EntityQueryModelVisitor entityQueryModelVisitor, ResultOperatorBase resultOperator, QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.VisitResultOperator(ResultOperatorBase resultOperator, QueryModel queryModel, Int32 index)
   at Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitResultOperator(ResultOperatorBase resultOperator, QueryModel queryModel, Int32 index)
   at Remotion.Linq.QueryModelVisitorBase.VisitResultOperators(ObservableCollection`1 resultOperators, QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.VisitQueryModel(QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitQueryModel(QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.Internal.SqlServerQueryModelVisitor.VisitQueryModel(QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.CreateQueryExecutor[TResult](QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass19_0`1.<CompileQuery>b__0()
   at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func`1 compiler)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query)
   at Reach.GCv3.Business.BusinessObjects.Lists.SupplierOrdersInfoList.DataPortal_Fetch(SupplierOrdersInfoListCriteria crit) in D:\Repos\gc3-website\src\Reach.GCv3.Business\BusinessObjects\SupplierOrderInfoList.cs:line 128
   at lambda_method(Closure , Object , Object[] )
   at Csla.Reflection.MethodCaller.CallMethod(Object obj, DynamicMethodHandle methodHandle, Boolean hasParameters, Object[] parameters)

Further technical details

EF Core version: (found in project.json or packages.config)
"Microsoft.EntityFrameworkCore": "1.0.0",
"Microsoft.AspNetCore.Http.Abstractions": "1.0.0",
Operating system: Win 8.1 x64
Visual Studio version: vs2015

Other details about my project setup:

@ErikEJ
Copy link
Contributor

ErikEJ commented Dec 5, 2016

GroupBy is not implemented?

@dazinator
Copy link
Author

GroupBy is implemented, but I think it has an issue when it encounters my subquery.

 at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.RelationalEntityQueryableExpressionVisitor.VisitSubQuery(SubQueryExpression expression)

Even though there is nothing wrong with my subquery.. (that I can see) and the query executes fine when the group by is not attempted.

@dazinator
Copy link
Author

Gonna update to 1.1.0 and retry it.

@dazinator
Copy link
Author

dazinator commented Dec 6, 2016

Ok I can't update to version 1.1.0 because that means updating some other packages that EF uses to 1.1.0 - which means I also then have to upgrade MVC 6 packages to 1.1.0 release. The MVC 6 1.1.0 release has its own set of issues that impact my application making an update not possible.

Gees I think I will be sticking to the LTS release. So I will try updating EF to 1.0.1 instead, and giving that a go.

@rowanmiller rowanmiller added this to the 1.2.0 milestone Dec 12, 2016
@maumar maumar assigned maumar and unassigned anpete Apr 13, 2017
@maumar
Copy link
Contributor

maumar commented Apr 14, 2017

Works in current bits, closing

@maumar maumar closed this as completed Apr 14, 2017
@maumar maumar added closed-fixed The issue has been fixed and is/will be included in the release indicated by the issue milestone. and removed type-investigation labels Apr 14, 2017
@ajcvickers ajcvickers changed the title NotImplemented {"Microsoft.EntityFrameworkCore.Query.ResultOperators.Internal.IncludeResultOperator"} Query: IncludeResultOperator not implemented in some client eval cases May 9, 2017
@divega divega added closed-fixed The issue has been fixed and is/will be included in the release indicated by the issue milestone. and removed closed-fixed The issue has been fixed and is/will be included in the release indicated by the issue milestone. labels May 10, 2017
@ajcvickers ajcvickers modified the milestones: 2.0.0-preview1, 2.0.0 Oct 15, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
closed-fixed The issue has been fixed and is/will be included in the release indicated by the issue milestone. type-bug
Projects
None yet
Development

No branches or pull requests

7 participants