question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Eager-loading System.ArgumentException

See original GitHub issue

Related 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:closed
  • Created 3 years ago
  • Comments:5 (3 by maintainers)

github_iconTop GitHub Comments

1reaction
detoxhbycommented, Jun 1, 2020

@sdanyliv updated the test’s GetTable<> calls based on visualizer data

0reactions
detoxhbycommented, Jun 2, 2020

✅ seems fine 👍 @sdanyliv

Read more comments on GitHub >

github_iconTop 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 >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found