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

GroupBy not work #1225

Closed
genusP opened this issue Jul 10, 2018 · 7 comments
Closed

GroupBy not work #1225

genusP opened this issue Jul 10, 2018 · 7 comments
Assignees
Labels
area: linq status: has-pr There is active PR for issue
Milestone

Comments

@genusP
Copy link
Contributor

genusP commented Jul 10, 2018

I test using aggregation with OData WebApi over linq2db.

Expression

db.GetTable<Task>()
	.GroupBy($it => new GroupByWrapper() {
		GroupByContainer = new LastInChain() {
			Name = "Id", 
			Value = $it.Id
		}
	})
	.Select($it => new AggregationWrapper() {
		GroupByContainer = $it.Key.GroupByContainer, 
		Container = new LastInChain() {
			Name = "TotalId", 
				Value = $it.AsQueryable().Sum($it => IIF(($it.ActualStage == null), null, Convert($it.ActualStage.Id, Nullable`1)))
		}
	})

Models
Task
GroupByWrapper
LastInChain

Exception message: "Property 'System.String Name' is not defined for type 'Microsoft.AspNet.OData.Query.Expressions.GroupByWrapper'
Parameter name: property"
Stack trace:
"    at System.Linq.Expressions.Expression.Property(Expression expression, PropertyInfo property)
   at System.Linq.Expressions.Expression.MakeMemberAccess(Expression expression, MemberInfo member)
   at LinqToDB.Linq.Builder.ExpressionBuilder.ConvertObjectComparison(ExpressionType nodeType, IBuildContext leftContext, Expression left, IBuildContext rightContext, Expression right) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.SqlBuilder.cs:line 1857
   at LinqToDB.Linq.Builder.ExpressionBuilder.ConvertCompare(IBuildContext context, ExpressionType nodeType, Expression left, Expression right) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.SqlBuilder.cs:line 1533
   at LinqToDB.Linq.Builder.ExpressionBuilder.ConvertPredicate(IBuildContext context, Expression expression) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.SqlBuilder.cs:line 1356
   at LinqToDB.Linq.Builder.ExpressionBuilder.BuildSearchCondition(IBuildContext context, Expression expression, List`1 conditions) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.SqlBuilder.cs:line 2515
   at LinqToDB.Linq.Builder.ExpressionBuilder.BuildWhere(IBuildContext parent, IBuildContext sequence, LambdaExpression condition, Boolean checkForSubQuery, Boolean enforceHaving) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.SqlBuilder.cs:line 48
   at LinqToDB.Linq.Builder.WhereBuilder.BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\WhereBuilder.cs:line 23
   at LinqToDB.Linq.Builder.ExpressionBuilder.BuildSequence(BuildInfo buildInfo) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.cs:line 175
   at LinqToDB.Linq.Builder.GroupByBuilder.GroupByContext.GetContext(Expression expression, Int32 level, BuildInfo buildInfo) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\GroupByBuilder.cs:line 699
   at LinqToDB.Linq.Builder.TableBuilder.BuildSequence(ExpressionBuilder builder, BuildInfo buildInfo) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\TableBuilder.cs:line 126
   at LinqToDB.Linq.Builder.ExpressionBuilder.BuildSequence(BuildInfo buildInfo) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.cs:line 175
   at LinqToDB.Linq.Builder.ExpressionBuilder.BuildSequence(BuildInfo buildInfo) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.cs:line 175
   at LinqToDB.Linq.Builder.SelectBuilder.BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\SelectBuilder.cs:line 36
   at LinqToDB.Linq.Builder.ExpressionBuilder.BuildSequence(BuildInfo buildInfo) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.cs:line 175
   at LinqToDB.Linq.Builder.AggregationBuilder.BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\AggregationBuilder.cs:line 32
   at LinqToDB.Linq.Builder.ExpressionBuilder.BuildSequence(BuildInfo buildInfo) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.cs:line 175
   at LinqToDB.Linq.Builder.ExpressionBuilder.GetSubQuery(IBuildContext context, MethodCallExpression expr) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.SqlBuilder.cs:line 232
   at LinqToDB.Linq.Builder.ExpressionBuilder.GetSubQueryContext(IBuildContext context, MethodCallExpression expr) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.QueryBuilder.cs:line 310
   at LinqToDB.Linq.Builder.ExpressionBuilder.GetSubQueryExpression(IBuildContext context, MethodCallExpression expr, Boolean enforceServerSide) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.QueryBuilder.cs:line 327
   at LinqToDB.Linq.Builder.ExpressionBuilder.TransformExpression(IBuildContext context, Expression expr, Boolean enforceServerSide) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.QueryBuilder.cs:line 260
   at LinqToDB.Linq.Builder.ExpressionBuilder.<>c__DisplayClass74_0.<BuildExpression>b__0(Expression expr) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.QueryBuilder.cs:line 49
   at LinqToDB.Expressions.Extensions.Transform(Expression expr, Func`2 func) in C:\projects\linq2db\Source\LinqToDB\Expressions\Extensions.cs:line 1354
   at LinqToDB.Expressions.Extensions.Transform(Expression expr, Func`2 func) in C:\projects\linq2db\Source\LinqToDB\Expressions\Extensions.cs:line 1429
   at LinqToDB.Expressions.Extensions.<>c__DisplayClass34_0.<Transform>g__Modify|1(MemberBinding b) in C:\projects\linq2db\Source\LinqToDB\Expressions\Extensions.cs:line 1500
   at LinqToDB.Expressions.Extensions.Transform2[T](ICollection`1 source, Func`2 func) in C:\projects\linq2db\Source\LinqToDB\Expressions\Extensions.cs:line 1322
   at LinqToDB.Expressions.Extensions.Transform(Expression expr, Func`2 func) in C:\projects\linq2db\Source\LinqToDB\Expressions\Extensions.cs:line 1546
   at LinqToDB.Linq.Builder.ExpressionBuilder.BuildExpression(IBuildContext context, Expression expression, Boolean enforceServerSide) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.QueryBuilder.cs:line 50
   at LinqToDB.Linq.Builder.ExpressionBuilder.TransformExpression(IBuildContext context, Expression expr, Boolean enforceServerSide) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.QueryBuilder.cs:line 71
   at LinqToDB.Linq.Builder.ExpressionBuilder.<>c__DisplayClass74_0.<BuildExpression>b__0(Expression expr) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.QueryBuilder.cs:line 49
   at LinqToDB.Expressions.Extensions.Transform(Expression expr, Func`2 func) in C:\projects\linq2db\Source\LinqToDB\Expressions\Extensions.cs:line 1354
   at LinqToDB.Expressions.Extensions.<>c__DisplayClass34_0.<Transform>g__Modify|1(MemberBinding b) in C:\projects\linq2db\Source\LinqToDB\Expressions\Extensions.cs:line 1500
   at LinqToDB.Expressions.Extensions.Transform2[T](ICollection`1 source, Func`2 func) in C:\projects\linq2db\Source\LinqToDB\Expressions\Extensions.cs:line 1322
   at LinqToDB.Expressions.Extensions.Transform(Expression expr, Func`2 func) in C:\projects\linq2db\Source\LinqToDB\Expressions\Extensions.cs:line 1546
   at LinqToDB.Linq.Builder.ExpressionBuilder.BuildExpression(IBuildContext context, Expression expression, Boolean enforceServerSide) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.QueryBuilder.cs:line 50
   at LinqToDB.Linq.Builder.SelectContext.BuildExpression(Expression expression, Int32 level, Boolean enforceServerSide) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\SelectContext.cs:line 112
   at LinqToDB.Linq.Builder.SelectContext.BuildQuery[T](Query`1 query, ParameterExpression queryParameter) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\SelectContext.cs:line 65
   at LinqToDB.Linq.Builder.ExpressionBuilder.Build[T]() in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.cs:line 161
   at LinqToDB.Linq.Query`1.CreateQuery(IDataContext dataContext, Expression expr) in C:\projects\linq2db\Source\LinqToDB\Linq\Query.cs:line 280
   at LinqToDB.Linq.Query`1.GetQuery(IDataContext dataContext, Expression& expr) in C:\projects\linq2db\Source\LinqToDB\Linq\Query.cs:line 233
   at LinqToDB.Linq.ExpressionQuery`1.GetQuery(Expression& expression, Boolean cache) in C:\projects\linq2db\Source\LinqToDB\Linq\ExpressionQuery.cs:line 84
   at LinqToDB.Linq.ExpressionQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() in C:\projects\linq2db\Source\LinqToDB\Linq\ExpressionQuery.cs:line 180
   at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
   at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at System.Linq.SystemCore_EnumerableDebugView`1.get_Items()

Environment details

linq2db version: 2.1.0
Database Server: Sql Server LocalDB
Operating system: Windows 10
Framework version: .NET Core 2

@sdanyliv
Copy link
Member

@genusP, which is original query without grouping?
Also, can you provide us with sample test project? It may save our time, which we usually do not have enough.

@genusP
Copy link
Contributor Author

genusP commented Jul 10, 2018

@sdanyliv, yes I can.

genusP added a commit to genusP/linq2db that referenced this issue Jul 10, 2018
@genusP genusP mentioned this issue Jul 10, 2018
@genusP
Copy link
Contributor Author

genusP commented Jul 10, 2018

@sdanyliv, I add PR with test

@sdanyliv
Copy link
Member

Thanks, looking at.

igor-tkachev added a commit that referenced this issue Jul 12, 2018
igor-tkachev added a commit that referenced this issue Jul 13, 2018
@sdanyliv sdanyliv self-assigned this Jul 17, 2018
@sdanyliv sdanyliv added area: linq status: has-pr There is active PR for issue labels Jul 17, 2018
@sdanyliv sdanyliv added this to the 2.2.0 milestone Jul 17, 2018
@xmichaelx
Copy link

I have exactly the same error using linq2db.EntityFrameworkCore with OData trying to find a workaround for this issue OData/WebApi/#1578 using ToLinqToDB() on DbSet from EF Context. It allowed me to perform to perform odata/file?$apply=groupby((FileType)) but fails on generating aggregation with exact same error as shown here.

@sdanyliv
Copy link
Member

@xmichaelx, without sample linq query it will be difficult to find solution.

@xmichaelx
Copy link

xmichaelx commented Aug 19, 2018

Ok, I've noticed that I had linq2db 2.1, I've updated to 2.2 and it works. Thank you very much!

I've made relevant SO post: https://stackoverflow.com/questions/51918056/aggregation-with-group-by-using-aspnet-core-odata-and-entity-framework-core

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area: linq status: has-pr There is active PR for issue
Development

No branches or pull requests

3 participants