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.

Error while grouping after a join

See original GitHub issue

I see the following exception

Exception message: 'p.ProductDescription' cannot be converted to SQL.
Stack trace:    in LinqToDB.Linq.Builder.SelectContext.GetMemberExpression(MemberInfo member, Boolean add, Type type, Expression sourceExpression) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\SelectContext.cs:riga 1163
   in LinqToDB.Linq.Builder.SelectContext.ConvertToSql(Expression expression, Int32 level, ConvertFlags flags) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\SelectContext.cs:riga 344
   in LinqToDB.Linq.Builder.SelectContext.ConvertToIndexInternal(Expression expression, Int32 level, ConvertFlags flags) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\SelectContext.cs:riga 556
   in LinqToDB.Linq.Builder.SelectContext.ConvertToIndex(Expression expression, Int32 level, ConvertFlags flags) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\SelectContext.cs:riga 432
   in LinqToDB.Linq.Builder.SubQueryContext.ConvertToSql(Expression expression, Int32 level, ConvertFlags flags) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\SubQueryContext.cs:riga 100
   in LinqToDB.Linq.Builder.SelectContext.<>c__DisplayClass37_0.<ConvertToSql>b__0(IBuildContext ctx, Expression ex, Int32 l) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\SelectContext.cs:riga 302
   in LinqToDB.Linq.Builder.SelectContext.ProcessScalar[T](Expression expression, Int32 level, Func`4 action, Func`1 defaultAction) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\SelectContext.cs:riga 903
   in LinqToDB.Linq.Builder.SelectContext.ConvertToSql(Expression expression, Int32 level, ConvertFlags flags) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\SelectContext.cs:riga 299
   in LinqToDB.Linq.Builder.ExpressionBuilder.ConvertToSql(IBuildContext context, Expression expression, Boolean unwrap) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.SqlBuilder.cs:riga 856
   in LinqToDB.Linq.Builder.ExpressionBuilder.ConvertExpressions(IBuildContext context, Expression expression, ConvertFlags queryConvertFlag) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.SqlBuilder.cs:riga 661
   in LinqToDB.Linq.Builder.SelectContext.ConvertToSql(Expression expression, Int32 level, ConvertFlags flags) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\SelectContext.cs:riga 281
   in LinqToDB.Linq.Builder.SelectContext.ConvertToIndexInternal(Expression expression, Int32 level, ConvertFlags flags) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\SelectContext.cs:riga 479
   in LinqToDB.Linq.Builder.SelectContext.ConvertToIndex(Expression expression, Int32 level, ConvertFlags flags) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\SelectContext.cs:riga 432
   in LinqToDB.Linq.Builder.FirstSingleBuilder.FirstSingleContext.ConvertToIndex(Expression expression, Int32 level, ConvertFlags flags) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\FirstSingleBuilder.cs:riga 276
   in LinqToDB.Linq.Builder.ExpressionBuilder.GetSubQuery(IBuildContext context, MethodCallExpression expr) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.SqlBuilder.cs:riga 238
   in LinqToDB.Linq.Builder.ExpressionBuilder.GetSubQueryContext(IBuildContext context, MethodCallExpression expr) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.QueryBuilder.cs:riga 310
   in LinqToDB.Linq.Builder.ExpressionBuilder.GetSubQueryExpression(IBuildContext context, MethodCallExpression expr, Boolean enforceServerSide) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.QueryBuilder.cs:riga 327
   in LinqToDB.Linq.Builder.ExpressionBuilder.TransformExpression(IBuildContext context, Expression expr, Boolean enforceServerSide) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.QueryBuilder.cs:riga 260
   in LinqToDB.Linq.Builder.ExpressionBuilder.<>c__DisplayClass74_0.<BuildExpression>b__0(Expression expr) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.QueryBuilder.cs:riga 49
   in LinqToDB.Expressions.Extensions.Transform(Expression expr, Func`2 func) in C:\projects\linq2db\Source\LinqToDB\Expressions\Extensions.cs:riga 1353
   in LinqToDB.Expressions.Extensions.<>c__DisplayClass34_0.<Transform>g__Modify|1(MemberBinding b) in C:\projects\linq2db\Source\LinqToDB\Expressions\Extensions.cs:riga 1500
   in LinqToDB.Expressions.Extensions.Transform2[T](ICollection`1 source, Func`2 func) in C:\projects\linq2db\Source\LinqToDB\Expressions\Extensions.cs:riga 1321
   in LinqToDB.Expressions.Extensions.Transform(Expression expr, Func`2 func) in C:\projects\linq2db\Source\LinqToDB\Expressions\Extensions.cs:riga 1546
   in LinqToDB.Linq.Builder.ExpressionBuilder.BuildExpression(IBuildContext context, Expression expression, Boolean enforceServerSide) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.QueryBuilder.cs:riga 49
   in LinqToDB.Linq.Builder.SelectContext.BuildExpression(Expression expression, Int32 level, Boolean enforceServerSide) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\SelectContext.cs:riga 112
   in LinqToDB.Linq.Builder.SelectContext.BuildQuery[T](Query`1 query, ParameterExpression queryParameter) in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\SelectContext.cs:riga 65
   in LinqToDB.Linq.Builder.ExpressionBuilder.Build[T]() in C:\projects\linq2db\Source\LinqToDB\Linq\Builder\ExpressionBuilder.cs:riga 159
   in LinqToDB.Linq.Query`1.CreateQuery(IDataContext dataContext, Expression expr) in C:\projects\linq2db\Source\LinqToDB\Linq\Query.cs:riga 280
   in LinqToDB.Linq.Query`1.GetQuery(IDataContext dataContext, Expression& expr) in C:\projects\linq2db\Source\LinqToDB\Linq\Query.cs:riga 233
   in LinqToDB.Linq.ExpressionQuery`1.GetQuery(Expression& expression, Boolean cache) in C:\projects\linq2db\Source\LinqToDB\Linq\ExpressionQuery.cs:riga 84
   in LinqToDB.Linq.ExpressionQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() in C:\projects\linq2db\Source\LinqToDB\Linq\ExpressionQuery.cs:riga 179
   in System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   in System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   in Import2TSS.Alerting.ComputPLInternal(DataConnection db, Action`1 Log, Nullable`1 cargoid) in C:\compliance\MAR_Reporting_API_Sourcing\OilPhysical_ImportCsv2DB\DB\Alerting.cs:riga 635
   in Import2TSS.Alerting.Detect(Action`1 Log, String ConnName, DateTime asofDate) in C:\compliance\MAR_Reporting_API_Sourcing\OilPhysical_ImportCsv2DB\DB\Alerting.cs:riga 844

Steps to reproduce

after the code

var queryTotCosts =
            from c in db.GetTable<Cost>()
            join n in db.GetTable<NominationValid>()
                on new
                {
                    c.CargoID,
                    c.DeliveryID,
                    c.DealNumber,
                    c.ParcelID
                } equals new
                {
                    n.CargoID,
                    n.DeliveryID,
                    DealNumber = n.DeliveryDealNumber > 0 ? n.DeliveryDealNumber : n.ReceiptDealNumber,
                    ParcelID = n.DeliveryDealNumber > 0 ? n.DeliveryParcelID : n.ReceiptParcelID
                }
            join t in db.GetTable<TradeValid>()
                on new { c.DealNumber, c.ParcelID } equals new { t.DealNumber , t.ParcelID }
            where c.OperationType != Cost.Operations.Delete.GetEnumDescription() && 
                  (cargoid == null || c.CargoID == cargoid)
            group new { c.FeePV, n.ProductDescription, t.PortfolioName } 
                by new { n.CargoID, c.Currency ,c.PayRec, n.TitleTranfertDate} into cargoGr
            select new CostTotal
            {
                CargoID = cargoGr.Key.CargoID,
                PayRec = cargoGr.Key.PayRec,
                TotAmount = cargoGr.Sum(cst => cst.FeePV),
                Currency = cargoGr.Key.Currency,
                TitleTransferDate = cargoGr.Key.TitleTranfertDate,
                Commodity = cargoGr.FirstOrDefault().ProductDescription,
                Portfolio = cargoGr.FirstOrDefault().PortfolioName
            };
var totCosts = queryTotCosts.ToArray();

Environment details

linq2db version: 2.5.4.0 Database Server: Ms Sql 2016 Operating system: Windows 7 Framework version: *.NET Framework 4.5.2

Issue Analytics

  • State:closed
  • Created 5 years ago
  • Comments:33 (13 by maintainers)

github_iconTop GitHub Comments

1reaction
sdanylivcommented, Apr 19, 2019

~Maybe you have to add booking_company into partition?~

Good 😃

0reactions
giuliohomecommented, Apr 18, 2019

I hopefully see… the problem is that I have multiple title transfer dates… Ok, your suggestion was really key! Thank you! It’s enough from your side, the issue is more in the assumptions of the functional logic. Thanks again.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Why am I getting an error while using group by with a left ...
You have to point by which comment_id it will be grouped. So you have to change line: GROUP BY comment_id. into. GROUP BY...
Read more >
7 Common GROUP BY Errors
1. Forgetting GROUP BY with Aggregate Functions · 2. Confusing WHERE and HAVING · 3. Listing a Column Inside SELECT but Not in...
Read more >
[Solved] Sql group by error in inner join please help me
Column 'TBL_pur_inv.invno' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause....
Read more >
Group BY DESC being ignored after join - Mysql 5
ASC/DESC in GROUP BY cannot specify what value from all possible in a group will be taken for non-aggregated and non-grouped output column....
Read more >
I can't join a group
If you're banned from a group, you'll get an error message when you try to join it. A group owner or manager can...
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