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

ArgumentOutOfRangeException when ordering by a constant #9758

Closed
sveinungh opened this issue Sep 11, 2017 · 5 comments
Closed

ArgumentOutOfRangeException when ordering by a constant #9758

sveinungh opened this issue Sep 11, 2017 · 5 comments

Comments

@sveinungh
Copy link

sveinungh commented Sep 11, 2017

This case is kind of silly and can easily be worked around. Ill post it anyway since it could be a symptom
of something more serious. First call works but when sorting by a constant first an Exception is thrown. No data needed for this test.

 at System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
   at System.Collections.Generic.List`1.get_Item(Int32 index)
   at Microsoft.EntityFrameworkCore.Query.Expressions.SelectExpression.BindSubqueryProjectionIndex(Int32 projectionIndex, IQuerySource querySource)
   at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.SqlTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
   at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at Remotion.Linq.Parsing.ThrowingExpressionVisitor.Visit(Expression expression)
   at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.SqlTranslatingExpressionVisitor.Visit(Expression expression)
   at Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitOrderByClause(OrderByClause orderByClause, QueryModel queryModel, Int32 index)
   at Remotion.Linq.Clauses.OrderByClause.Accept(IQueryModelVisitor visitor, QueryModel queryModel, Int32 index)
   at Remotion.Linq.QueryModelVisitorBase.VisitBodyClauses(ObservableCollection`1 bodyClauses, 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.ExpressionVisitors.RelationalEntityQueryableExpressionVisitor.VisitSubQuery(SubQueryExpression expression)
   at Remotion.Linq.Clauses.Expressions.SubQueryExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.ExpressionVisitorBase.VisitLambda[T](Expression`1 node)
   at System.Linq.Expressions.Expression`1.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at System.Dynamic.Utils.ExpressionVisitorUtils.VisitArguments(ExpressionVisitor visitor, IArgumentProvider nodes)
   at System.Linq.Expressions.ExpressionVisitor.VisitMethodCall(MethodCallExpression node)
   at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.RelationalEntityQueryableExpressionVisitor.VisitMethodCall(MethodCallExpression node)
   at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at System.Dynamic.Utils.ExpressionVisitorUtils.VisitBlockExpressions(ExpressionVisitor visitor, BlockExpression block)
   at System.Linq.Expressions.ExpressionVisitor.VisitBlock(BlockExpression node)
   at System.Linq.Expressions.BlockExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.ExpressionVisitorBase.VisitLambda[T](Expression`1 node)
   at System.Linq.Expressions.Expression`1.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at System.Dynamic.Utils.ExpressionVisitorUtils.VisitArguments(ExpressionVisitor visitor, IArgumentProvider nodes)
   at System.Linq.Expressions.ExpressionVisitor.VisitMethodCall(MethodCallExpression node)
   at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.RelationalEntityQueryableExpressionVisitor.VisitMethodCall(MethodCallExpression node)
   at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.ReplaceClauseReferences(Expression expression, IQuerySource querySource, Boolean inProjection)
   at Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.VisitSelectClause(SelectClause selectClause, QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitSelectClause(SelectClause selectClause, QueryModel queryModel)
   at Remotion.Linq.Clauses.SelectClause.Accept(IQueryModelVisitor visitor, 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.EntityQueryModelVisitor.CreateQueryExecutor[TResult](QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Storage.Database.CompileQuery[TResult](QueryModel queryModel)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore[TResult](Expression query, INodeTypeProvider nodeTypeProvider, IDatabase database, IDiagnosticsLogger`1 logger, Type contextType)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass15_0`1.<Execute>b__0()
   at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQueryCore[TFunc](Object cacheKey, Func`1 compiler)
   at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func`1 compiler)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query)
   at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression)
   at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)
   at EFDebug.Program.Main(String[] args) in E:\asp_net\tests\EFDebug\EFDebug\Program.cs:line 18

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;

namespace EFDebug
{
    class Program
    {
        static void Main(string[] args)
        {
            var loggerFactory = new LoggerFactory();
            loggerFactory.AddDebug();
            var connection = @"";
            var ctx = new MyContext(new DbContextOptionsBuilder().UseSqlServer(connection).UseLoggerFactory(loggerFactory).Options);
            var f = ctx.Parent.Include(p => p.Children).OrderBy(p => p.Id).FirstOrDefault();
            var first = ctx.Parent.Include(p => p.Children).OrderBy(p => true).ThenBy(p => p.Id).FirstOrDefault();
        }
    }
    public class Parent
    {
        public int Id { get; set; }
        public string Name { get; set; }        

        public virtual ICollection<Child> Children { get; set; }


    }

    public class Child
    {
        public int Id { get; set; }
        public string Name { get; set; }


        public int ParentId { get; set; }       
    }
    public class MyContext : DbContext
    {
        public MyContext(DbContextOptions options)
            : base(options)
        {

        }
        public DbSet<Parent> Parent { get; set; }
    }

/*
create table Parent
(
	Id int identity primary key,
	Name varchar(255)	
)

create table Child
(
	Id int identity primary key,
	Name varchar(255),
	ParentId int references parent(id)
)
*/
}

Further technical details

EF Core version: 2.0 and latest preview
Database Provider: SQL, Azure and Express
Operating system: Windows
IDE: VS2017

@ajcvickers ajcvickers added this to the Backlog milestone Sep 11, 2017
@tomaszmadeyski
Copy link

I have similar case (at least the same stacktrace) but in my case it also fails on "regular" OrderBy (meaning .OrderBy(c => c.Id). What I noticed (and might me useful to solve this issue) that in my case this exception occurs only when Include is called before OrderBy - is this also your case? (remove Include call and there's no exception)

@sveinungh
Copy link
Author

Yes, without the Include it works. Even if i do something like ThenBy(p => p.Children.Count)

@sveinungh
Copy link
Author

And you should post a repro since your case sounds much more serious. Hopefully that would be fixed in 2,1. My case is not important since it can be solved with a quasi constant like .OrderBy(o=>o.Id>0)

@smitpatel
Copy link
Contributor

Duplicate of #10045
Fix is available in 2.0.1 version of EF Core.

@smitpatel smitpatel removed this from the Backlog milestone Feb 7, 2018
@adrianotrentim
Copy link

Dear, first, excuse my English.

I found a similar error.

Follow steps to simuate:

var query = db.Person
.Include(p => p.PersonType)
.ThenInclude(pt => pt.Type)
.Include(a => a.PersonAddress)
.Where(p => p.Active)
.GroupBy(p => new { item = 1 }); // => THROW EXCEPTION INDEX OUT OF RANGE

I'm using EF 2.0.1 version
Stack

em System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
em Microsoft.EntityFrameworkCore.Query.Expressions.SelectExpression.BindSubqueryProjectionIndex(Int32 projectionIndex, IQuerySource querySource)
em Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.SqlTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
em System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)
em Remotion.Linq.Parsing.ThrowingExpressionVisitor.Visit(Expression expression)
em Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.SqlTranslatingExpressionVisitor.Visit(Expression expression)
em Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitOrderByClause(OrderByClause orderByClause, QueryModel queryModel, Int32 index)
em Remotion.Linq.Clauses.OrderByClause.Accept(IQueryModelVisitor visitor, QueryModel queryModel, Int32 index)
em Remotion.Linq.QueryModelVisitorBase.VisitBodyClauses(ObservableCollection1 bodyClauses, QueryModel queryModel) em Remotion.Linq.QueryModelVisitorBase.VisitQueryModel(QueryModel queryModel) em Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.VisitQueryModel(QueryModel queryModel) em Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitQueryModel(QueryModel queryModel) em Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.RelationalEntityQueryableExpressionVisitor.VisitSubQuery(SubQueryExpression expression) em Remotion.Linq.Clauses.Expressions.SubQueryExpression.Accept(ExpressionVisitor visitor) em System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) em Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.ExpressionVisitorBase.VisitLambda[T](Expression1 node)
em System.Linq.Expressions.Expression1.Accept(ExpressionVisitor visitor) em System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) em System.Linq.Expressions.ExpressionVisitor.VisitArguments(IArgumentProvider nodes) em System.Linq.Expressions.ExpressionVisitor.VisitMethodCall(MethodCallExpression node) em Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.RelationalEntityQueryableExpressionVisitor.VisitMethodCall(MethodCallExpression node) em System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor) em System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) em System.Linq.Expressions.ExpressionVisitor.VisitBlock(BlockExpression node) em System.Linq.Expressions.BlockExpression.Accept(ExpressionVisitor visitor) em System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) em Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.ExpressionVisitorBase.VisitLambda[T](Expression1 node)
em System.Linq.Expressions.Expression1.Accept(ExpressionVisitor visitor) em System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) em System.Linq.Expressions.ExpressionVisitor.VisitArguments(IArgumentProvider nodes) em System.Linq.Expressions.ExpressionVisitor.VisitMethodCall(MethodCallExpression node) em Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.RelationalEntityQueryableExpressionVisitor.VisitMethodCall(MethodCallExpression node) em System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor) em System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) em Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.ReplaceClauseReferences(Expression expression, IQuerySource querySource, Boolean inProjection) em Microsoft.EntityFrameworkCore.Query.ResultOperatorHandler.HandleGroup(EntityQueryModelVisitor entityQueryModelVisitor, GroupResultOperator groupResultOperator, QueryModel queryModel) em Microsoft.EntityFrameworkCore.Query.ResultOperatorHandler.<>c.<.cctor>b__33_11(EntityQueryModelVisitor v, ResultOperatorBase r, QueryModel q) em Microsoft.EntityFrameworkCore.Query.ResultOperatorHandler.HandleResultOperator(EntityQueryModelVisitor entityQueryModelVisitor, ResultOperatorBase resultOperator, QueryModel queryModel) em Microsoft.EntityFrameworkCore.Query.Internal.RelationalResultOperatorHandler.HandlerContext.EvalOnClient(Boolean requiresClientResultOperator) em Microsoft.EntityFrameworkCore.Query.Internal.RelationalResultOperatorHandler.HandleGroup(HandlerContext handlerContext) em Microsoft.EntityFrameworkCore.Query.Internal.RelationalResultOperatorHandler.HandleResultOperator(EntityQueryModelVisitor entityQueryModelVisitor, ResultOperatorBase resultOperator, QueryModel queryModel) em Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.VisitResultOperator(ResultOperatorBase resultOperator, QueryModel queryModel, Int32 index) em Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitResultOperator(ResultOperatorBase resultOperator, QueryModel queryModel, Int32 index) em Remotion.Linq.QueryModelVisitorBase.VisitResultOperators(ObservableCollection1 resultOperators, QueryModel queryModel)
em Remotion.Linq.QueryModelVisitorBase.VisitQueryModel(QueryModel queryModel)
em Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.VisitQueryModel(QueryModel queryModel)
em Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitQueryModel(QueryModel queryModel)
em Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.CreateQueryExecutor[TResult](QueryModel queryModel)
em Microsoft.EntityFrameworkCore.Storage.Database.CompileQuery[TResult](QueryModel queryModel)
--- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada ---
em Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore[TResult](Expression query, INodeTypeProvider nodeTypeProvider, IDatabase database, IDiagnosticsLogger1 logger, Type contextType) em Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass15_01.b__0()
em Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQueryCore[TFunc](Object cacheKey, Func1 compiler) em Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func1 compiler)
em Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query)
em Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression)
em Remotion.Linq.QueryableBase1.GetEnumerator() em System.Linq.SystemCore_EnumerableDebugView1.get_Items()

@ajcvickers ajcvickers reopened this Oct 16, 2022
@ajcvickers ajcvickers closed this as not planned Won't fix, can't repro, duplicate, stale Oct 16, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants