Eager-loading System.ArgumentException
See original GitHub issueRelated to #1764
Exception message:
System.ArgumentException : Expression of type 'System.Linq.Expressions.Expression`1[System.Func`2[Entities.QuestionPicture,<>f__AnonymousType9`2[System.Int32,System.Int32]]]' cannot be used for parameter of type 'System.Linq.Expressions.Expression`1[System.Func`2[Entities.QuestionPicture,LinqToDB.Linq.Builder.KDH`2[<>f__AnonymousType6`2[Entities.Question,Entities.QuestionHeaderInformation],<>f__AnonymousType9`2[System.Int32,System.Int32]]]]' of method 'System.Linq.IQueryable`1[LinqToDB.Linq.Builder.KDH`2[<>f__AnonymousType6`2[Entities.Question,Entities.QuestionHeaderInformation],DTOs.StoredQuestionDTO]] GroupJoin[KDH`2,QuestionPicture,KDH`2,KDH`2](System.Linq.IQueryable`1[LinqToDB.Linq.Builder.KDH`2[<>f__AnonymousType6`2[Entities.Question,Entities.QuestionHeaderInformation],<>f__AnonymousType8`2[<>f__AnonymousType6`2[Entities.Question,Entities.QuestionHeaderInformation],System.Collections.Generic.IEnumerable`1[Entities.QuestionDifficulty]]]], System.Collections.Generic.IEnumerable`1[Entities.QuestionPicture], System.Linq.Expressions.Expression`1[System.Func`2[LinqToDB.Linq.Builder.KDH`2[<>f__AnonymousType6`2[Entities.Question,Entities.QuestionHeaderInformation],<>f__AnonymousType8`2[<>f__AnonymousType6`2[Entities.Question,Entities.QuestionHeaderInformation],System.Collections.Generic.IEnumerable`1[Entities.QuestionDifficulty]]],LinqToDB.Linq.Builder.KDH`2[<>f__AnonymousType6`2[Entities.Question,Entities.QuestionHeaderInformation],<>f__AnonymousType9`2[System.Int32,System.Int32]]]], System.Linq.Expressions.Expression`1[System.Func`2[Entities.QuestionPicture,LinqToDB.Linq.Builder.KDH`2[<>f__AnonymousType6`2[Entities.Question,Entities.QuestionHeaderInformation],<>f__AnonymousType9`2[System.Int32,System.Int32]]]], System.Linq.Expressions.Expression`1[System.Func`3[LinqToDB.Linq.Builder.KDH`2[<>f__AnonymousType6`2[Entities.Question,Entities.QuestionHeaderInformation],<>f__AnonymousType8`2[<>f__AnonymousType6`2[Entities.Question,Entities.QuestionHeaderInformation],System.Collections.Generic.IEnumerable`1[Entities.QuestionDifficulty]]],System.Collections.Generic.IEnumerable`1[Entities.QuestionPicture],LinqToDB.Linq.Builder.KDH`2[<>f__AnonymousType6`2[Entities.Question,Entities.QuestionHeaderInformation],DTOs.StoredQuestionDTO]]])' (Parameter 'arg3')
Stack trace:
at System.Dynamic.Utils.ExpressionUtils.ValidateOneArgument(MethodBase method, ExpressionType nodeKind, Expression arguments, ParameterInfo pi, String methodParamName, String argumentParamName, Int32 index)
at System.Linq.Expressions.Expression.Call(MethodInfo method, Expression arg0, Expression arg1, Expression arg2, Expression arg3, Expression arg4)
at System.Linq.Expressions.Expression.Call(Expression instance, MethodInfo method, IEnumerable`1 arguments)
at LinqToDB.Linq.Builder.EagerLoading.ApplyReMapping(Expression expr, ReplaceInfo replaceInfo, Boolean isQueryable)
at LinqToDB.Linq.Builder.EagerLoading.ApplyReMapping(Expression expr, ReplaceInfo replaceInfo, Boolean isQueryable)
at LinqToDB.Linq.Builder.EagerLoading.GenerateDetailsExpression(IBuildContext context, MappingSchema mappingSchema, Expression expression)
at LinqToDB.Linq.Builder.ExpressionBuilder.GetMultipleQueryExpression(IBuildContext context, MappingSchema mappingSchema, Expression expression, HashSet`1 parameters, Boolean& isLazy)
at LinqToDB.Linq.Builder.ExpressionBuilder.BuildMultipleQuery(IBuildContext context, Expression expression, Boolean enforceServerSide)
at LinqToDB.Linq.Builder.JoinBuilder.GroupJoinContext.BuildExpression(Expression expression, Int32 level, Boolean enforceServerSide)
at LinqToDB.Linq.Builder.ExpressionBuilder.TransformExpression(IBuildContext context, Expression expr, Boolean enforceServerSide, String alias)
at LinqToDB.Linq.Builder.ExpressionBuilder.<>c__DisplayClass77_0.<BuildExpression>b__0(Expression expr)
at LinqToDB.Expressions.Extensions.Transform(Expression expr, Func`2 func)
at LinqToDB.Linq.Builder.ExpressionBuilder.BuildExpression(IBuildContext context, Expression expression, Boolean enforceServerSide, String alias)
at LinqToDB.Linq.Builder.SelectContext.BuildExpression(Expression expression, Int32 level, Boolean enforceServerSide)
at LinqToDB.Linq.Builder.JoinBuilder.GroupJoinContext.BuildExpression(Expression expression, Int32 level, Boolean enforceServerSide)
at LinqToDB.Linq.Builder.PassThroughContext.BuildExpression(Expression expression, Int32 level, Boolean enforceServerSide)
at LinqToDB.Linq.Builder.SelectContext.BuildExpression(Expression expression, Int32 level, Boolean enforceServerSide)
at LinqToDB.Linq.Builder.JoinBuilder.GroupJoinContext.BuildExpression(Expression expression, Int32 level, Boolean enforceServerSide)
at LinqToDB.Linq.Builder.ExpressionBuilder.TransformExpression(IBuildContext context, Expression expr, Boolean enforceServerSide, String alias)
at LinqToDB.Linq.Builder.ExpressionBuilder.<>c__DisplayClass77_0.<BuildExpression>b__0(Expression expr)
at LinqToDB.Expressions.Extensions.Transform(Expression expr, Func`2 func)
at LinqToDB.Expressions.Extensions.Transform2[T](IEnumerable`1 source, Func`2 func)
at LinqToDB.Expressions.Extensions.Transform(Expression expr, Func`2 func)
at LinqToDB.Linq.Builder.ExpressionBuilder.BuildExpression(IBuildContext context, Expression expression, Boolean enforceServerSide, String alias)
at LinqToDB.Linq.Builder.ExpressionBuilder.CorrectConditional(IBuildContext context, Expression expr, Boolean enforceServerSide, String alias)
at LinqToDB.Linq.Builder.ExpressionBuilder.ConvertAssignmentArgument(IBuildContext context, Expression expr, MemberInfo memberInfo, Boolean enforceServerSide, String alias)
at LinqToDB.Linq.Builder.ExpressionBuilder.TransformExpression(IBuildContext context, Expression expr, Boolean enforceServerSide, String alias)
at LinqToDB.Linq.Builder.ExpressionBuilder.<>c__DisplayClass77_0.<BuildExpression>b__0(Expression expr)
at LinqToDB.Expressions.Extensions.Transform(Expression expr, Func`2 func)
at LinqToDB.Linq.Builder.ExpressionBuilder.BuildExpression(IBuildContext context, Expression expression, Boolean enforceServerSide, String alias)
at LinqToDB.Linq.Builder.SelectContext.BuildExpression(Expression expression, Int32 level, Boolean enforceServerSide)
at LinqToDB.Linq.Builder.JoinBuilder.GroupJoinContext.BuildExpression(Expression expression, Int32 level, Boolean enforceServerSide)
at LinqToDB.Linq.Builder.SelectContext.BuildQuery[T](Query`1 query, ParameterExpression queryParameter)
at LinqToDB.Linq.Builder.ExpressionBuilder.Build[T]()
at LinqToDB.Linq.Query`1.CreateQuery(IDataContext dataContext, Expression expr)
at LinqToDB.Linq.Query`1.GetQuery(IDataContext dataContext, Expression& expr)
at LinqToDB.Linq.ExpressionQuery`1.GetQuery(Expression& expression, Boolean cache)
at LinqToDB.Linq.ExpressionQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
Steps to reproduce
Note: the following setting were used
LinqToDB.Common.Configuration.Linq.GuardGrouping = false;
Generated test: ExpressionTest.0.cs
Generated test with query.GenerateTestString()
:
//---------------------------------------------------------------------------------------------------
// This code was generated by LinqToDB.
//---------------------------------------------------------------------------------------------------
using System;
using System.Linq;
using System.Linq.Expressions;
using LinqToDB;
using NUnit.Framework;
namespace Entities
{
[LinqToDB.Mapping.TableAttribute("Modules")]
public class Module
{
[LinqToDB.Mapping.PrimaryKeyAttribute()]
[LinqToDB.Mapping.IdentityAttribute()]
public int Id { get; set; }
}
}
namespace Entities
{
[LinqToDB.Mapping.TableAttribute("Questions")]
public class Question
{
[LinqToDB.Mapping.PrimaryKeyAttribute()]
public int Id { get; set; }
[LinqToDB.Mapping.PrimaryKeyAttribute()]
public int Revision { get; set; }
[LinqToDB.Mapping.AssociationAttribute(ThisKey = "Id", OtherKey = "Id")]
public Entities.QuestionId QuestionId { get; set; }
public int SubjectId { get; set; }
public int Topic { get; set; }
public int Paragraph { get; set; }
public int SubParagraph { get; set; }
public int ModuleId { get; set; }
public int QuestionNumber { get; set; }
}
}
namespace Entities
{
[LinqToDB.Mapping.TableAttribute("QuestionDifficulties")]
public class QuestionDifficulty
{
[LinqToDB.Mapping.PrimaryKeyAttribute()]
[LinqToDB.Mapping.ColumnAttribute(Order = 0)]
public int QuestionId { get; set; }
[LinqToDB.Mapping.PrimaryKeyAttribute()]
[LinqToDB.Mapping.ColumnAttribute(Order = 1)]
public int QuestionRevision { get; set; }
}
}
namespace Entities
{
[LinqToDB.Mapping.TableAttribute("QuestionHeaderInformations")]
public class QuestionHeaderInformation
{
[LinqToDB.Mapping.PrimaryKeyAttribute()]
public int SubjectId { get; set; }
[LinqToDB.Mapping.PrimaryKeyAttribute()]
public int Topic { get; set; }
[LinqToDB.Mapping.PrimaryKeyAttribute()]
public int Paragraph { get; set; }
[LinqToDB.Mapping.PrimaryKeyAttribute()]
public int SubParagraph { get; set; }
}
}
namespace Entities
{
[LinqToDB.Mapping.TableAttribute("QuestionIds")]
public class QuestionId
{
[LinqToDB.Mapping.PrimaryKeyAttribute()]
[LinqToDB.Mapping.IdentityAttribute()]
public int Id { get; set; }
public int Revision { get; set; }
}
}
namespace Entities
{
[LinqToDB.Mapping.TableAttribute("QuestionPictures")]
public class QuestionPicture
{
[LinqToDB.Mapping.PrimaryKeyAttribute()]
[LinqToDB.Mapping.ColumnAttribute(Order = 0)]
public int QuestionId { get; set; }
[LinqToDB.Mapping.PrimaryKeyAttribute()]
[LinqToDB.Mapping.ColumnAttribute(Order = 1)]
public int QuestionRevision { get; set; }
}
}
namespace Infrastructure
{
public class DbConnection : LinqToDB.Data.DataConnection, ICloneable, LinqToDB.IDataContext, LinqToDB.IEntityServices, IDisposable
{
public DbConnection()
{
throw new NotImplementedException();
}
public DbConnection(LinqToDB.Mapping.MappingSchema mappingSchema)
{
throw new NotImplementedException();
}
public DbConnection(string configurationString)
{
throw new NotImplementedException();
}
public DbConnection(string configurationString, LinqToDB.Mapping.MappingSchema mappingSchema)
{
throw new NotImplementedException();
}
public DbConnection(string providerName, string connectionString)
{
throw new NotImplementedException();
}
public DbConnection(LinqToDB.DataProvider.IDataProvider dataProvider, string connectionString)
{
throw new NotImplementedException();
}
public DbConnection(LinqToDB.DataProvider.IDataProvider dataProvider, Func<System.Data.IDbConnection> connectionFactory)
{
throw new NotImplementedException();
}
public DbConnection(LinqToDB.DataProvider.IDataProvider dataProvider, System.Data.IDbConnection connection)
{
throw new NotImplementedException();
}
public DbConnection(LinqToDB.DataProvider.IDataProvider dataProvider, System.Data.IDbTransaction transaction)
{
throw new NotImplementedException();
}
public DbConnection(string providerName, string connectionString, LinqToDB.Mapping.MappingSchema mappingSchema)
{
throw new NotImplementedException();
}
public DbConnection(LinqToDB.DataProvider.IDataProvider dataProvider, string connectionString, LinqToDB.Mapping.MappingSchema mappingSchema)
{
throw new NotImplementedException();
}
public DbConnection(LinqToDB.DataProvider.IDataProvider dataProvider, Func<System.Data.IDbConnection> connectionFactory, LinqToDB.Mapping.MappingSchema mappingSchema)
{
throw new NotImplementedException();
}
public DbConnection(LinqToDB.DataProvider.IDataProvider dataProvider, System.Data.IDbConnection connection, LinqToDB.Mapping.MappingSchema mappingSchema)
{
throw new NotImplementedException();
}
public DbConnection(LinqToDB.DataProvider.IDataProvider dataProvider, System.Data.IDbConnection connection, bool disposeConnection)
{
throw new NotImplementedException();
}
public DbConnection(LinqToDB.DataProvider.IDataProvider dataProvider, System.Data.IDbTransaction transaction, LinqToDB.Mapping.MappingSchema mappingSchema)
{
throw new NotImplementedException();
}
}
}
namespace Migrator.DTOs
{
public class StoredQuestionDTO
{
public Entities.QuestionId QuestionId { get; set; }
public Entities.Question Question { get; set; }
public Entities.QuestionHeaderInformation QuestionHeaderInformation { get; set; }
public System.Collections.Generic.List<Entities.QuestionDifficulty> Difficulties { get; set; }
public System.Collections.Generic.List<Entities.QuestionPicture> QuestionPictures { get; set; }
}
}
namespace Migrator.Models
{
public class MigrationEnvironment
{
public Entities.Module Module { get; set; }
}
}
namespace Migrator.Services
{
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
class <>c__DisplayClass23_0
{
public System.Collections.Generic.List<int> subjectIds;
}
}
namespace Migrator.Services
{
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
class <>c__DisplayClass23_1
{
public Migrator.Services.QstnMigrator+<>c__DisplayClass23_0 CS$<>8__locals1;
public System.Collections.Generic.IEnumerable<int> actualQuestionIds;
}
}
namespace Migrator.Services
{
public class QstnMigrator
{
public Migrator.Models.MigrationEnvironment MigrationEnvironment { get; set; }
}
}
namespace Tests.UserTests
{
[TestFixture]
public class UserTest : TestBase
{
[Test, DataContextSource]
public void Test(string context)
{
// value(Infrastructure.DbConnection).GetTable().LoadWith(x => x.QuestionId).Join(value(Infrastructure.DbConnection).GetTable(), question => new <>f__AnonymousType80`2(Id = question.Id, Revision = question.Revision), questionId => new <>f__AnonymousType80`2(Id = questionId.Id, Revision = questionId.Revision), (question, questionId) => question).Join(value(Infrastructure.DbConnection).GetTable(), question => new <>f__AnonymousType7`4(SubjectId = question.SubjectId, Topic = question.Topic, Paragraph = question.Paragraph, SubParagraph = question.SubParagraph), questionHeaderInformation => new <>f__AnonymousType7`4(SubjectId = questionHeaderInformation.SubjectId, Topic = questionHeaderInformation.Topic, Paragraph = questionHeaderInformation.Paragraph, SubParagraph = questionHeaderInformation.SubParagraph), (question, questionHeaderInformation) => new <>f__AnonymousType6`2(question = question, questionHeaderInformation = questionHeaderInformation)).GroupJoin(value(Infrastructure.DbConnection).GetTable(), <>h__TransparentIdentifier0 => new <>f__AnonymousType9`2(Id = <>h__TransparentIdentifier0.question.Id, Revision = <>h__TransparentIdentifier0.question.Revision), questionDifficulty => new <>f__AnonymousType9`2(Id = questionDifficulty.QuestionId, Revision = questionDifficulty.QuestionRevision), (<>h__TransparentIdentifier0, questionDifficultyN) => new <>f__AnonymousType8`2(<>h__TransparentIdentifier0 = <>h__TransparentIdentifier0, questionDifficultyN = questionDifficultyN)).GroupJoin(value(Infrastructure.DbConnection).GetTable(), <>h__TransparentIdentifier1 => new <>f__AnonymousType9`2(Id = <>h__TransparentIdentifier1.<>h__TransparentIdentifier0.question.Id, Revision = <>h__TransparentIdentifier1.<>h__TransparentIdentifier0.question.Revision), questionPicture => new <>f__AnonymousType9`2(Id = questionPicture.QuestionId, Revision = questionPicture.QuestionRevision), (<>h__TransparentIdentifier1, questionPictureN) => new StoredQuestionDTO() {QuestionId = <>h__TransparentIdentifier1.<>h__TransparentIdentifier0.question.QuestionId, Question = <>h__TransparentIdentifier1.<>h__TransparentIdentifier0.question, QuestionHeaderInformation = <>h__TransparentIdentifier1.<>h__TransparentIdentifier0.questionHeaderInformation, Difficulties = <>h__TransparentIdentifier1.questionDifficultyN.ToList(), QuestionPictures = questionPictureN.ToList()}).Where(x => (((x.Question.ModuleId == value(Migrator.Services.QstnMigrator).MigrationEnvironment.Module.Id) AndAlso value(Migrator.Services.QstnMigrator+<>c__DisplayClass23_1).CS$<>8__locals1.subjectIds.Contains(x.Question.SubjectId)) AndAlso value(Migrator.Services.QstnMigrator+<>c__DisplayClass23_1).actualQuestionIds.Contains(x.Question.QuestionNumber)))
using (var db = GetDataContext(context))
{
var quey = value(Infrastructure.DbConnection).GetTable<Entities.Question>()
.LoadWith(x => x.QuestionId)
.Join(
value(Infrastructure.DbConnection).GetTable<Entities.QuestionId>(),
question => new
{
Id = question.Id,
Revision = question.Revision
},
questionId => new
{
Id = questionId.Id,
Revision = questionId.Revision
},
(question, questionId) => question)
.Join(
value(Infrastructure.DbConnection).GetTable<Entities.QuestionHeaderInformation>(),
question => new
{
SubjectId = question.SubjectId,
Topic = question.Topic,
Paragraph = question.Paragraph,
SubParagraph = question.SubParagraph
},
questionHeaderInformation => new
{
SubjectId = questionHeaderInformation.SubjectId,
Topic = questionHeaderInformation.Topic,
Paragraph = questionHeaderInformation.Paragraph,
SubParagraph = questionHeaderInformation.SubParagraph
},
(question, questionHeaderInformation) => new
{
question = question,
questionHeaderInformation = questionHeaderInformation
})
.GroupJoin(
value(Infrastructure.DbConnection).GetTable<Entities.QuestionDifficulty>(),
tp0 => new
{
Id = tp0.question.Id,
Revision = tp0.question.Revision
},
questionDifficulty => new
{
Id = questionDifficulty.QuestionId,
Revision = questionDifficulty.QuestionRevision
},
(tp0, questionDifficultyN) => new
{
tp0 = tp0,
questionDifficultyN = questionDifficultyN
})
.GroupJoin(
value(Infrastructure.DbConnection).GetTable<EntitiesQuestionPicture>(),
tp1 => new
{
Id = tp1.tp0.question.Id,
Revision = tp1.tp0.question.Revision
},
questionPicture => new
{
Id = questionPicture.QuestionId,
Revision = questionPicture.QuestionRevision
},
(tp1, questionPictureN) => new Migrator.DTOs.StoredQuestionDTO()
{
QuestionId = tp1.tp0.question.QuestionId,
Question = tp1.tp0.question,
QuestionHeaderInformation = tp1.tp0.questionHeaderInformation,
Difficulties = tp1.questionDifficultyN
.ToList(),
QuestionPictures = questionPictureN
.ToList()
})
.Where(
x => (((x.Question.ModuleId == value(Migrator.Services.QstnMigrator).MigrationEnvironment.Module.Id) && value(Migrator.Services.QstnMigrator+<>c__DisplayClass23_1).CS$<>8__locals1.subjectIds.Contains(
x.Question.SubjectId)) && value(Migrator.Services.QstnMigrator+<>c__DisplayClass23_1).actualQuestionIds
.Contains(
x.Question.QuestionNumber)));
}
}
}
}
Environment details
linq2db version: v3.0.0-rc0 Database Server: SqlServer 2017 Database Provider: SqlServer (Microsoft.Data.SqlClient) Operating system: Windows 10 1909 .NET Framework: .NET Core 3.1
Issue Analytics
- State:
- Created 3 years ago
- Comments:5 (3 by maintainers)
Top Results From Across the Web
ArgumentException when doing eager loading in EF7
I'm trying to load a model with several navigation properties. Most of the referenced models load fine, but when trying to Include() a ......
Read more >Eager Load Navigation Properties By Default In EF Core
Normally when loading navigation properties in EF Core, you're forced to use the “Include” method to specify which navigational properties to pull back...
Read more >Loading Related Entities - EF6
Eager loading is the process whereby a query for one type of entity also loads related entities as part of the query. Eager...
Read more >Eager Loading in Entity Framework
Eager loading is the process whereby a query for one type of entity also loads related entities as part of the query, so...
Read more >Lazy Loading navigation properties returns 'System. ...
With EF-Core, I need to specify the way I want to load my values. Because I often need to access many navigation properties...
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
@sdanyliv updated the test’s
GetTable<>
calls based on visualizer data✅ seems fine 👍 @sdanyliv