DataObjects-NET / dataobjects-net

https://dataobjects.net
MIT License
60 stars 23 forks source link

Query translation exception #306

Open letarak opened 1 year ago

letarak commented 1 year ago

DO 7.0

\\ OK
_ = Query.All<Entity>()
  .Select(it => Storage.All<Entity>()
      .Select(e => e.NullableDateTime ?? DateTime.MinValue)
      .FirstOrDefault())
  .ToArray();

\\ OK
_ = Query.All<Entity>()
  .Select(it => (Storage.All<Entity>()
      .Select(e => e.NullableDateTime)
      .FirstOrDefault() ?? DateTime.MinValue)
      .Date)
  .ToArray();

\\ FAIL
_ = Query.All<Entity>()
  .Select(it => Storage.All<Entity>()
      .Select(e => e.NullableDateTime)
      .FirstOrDefault()
      .Value
      .Date)
  .ToArray();

\\ FAIL
_ = Query.All<Entity>()
  .Select(it => Storage.All<Entity>()
      .Select(e => e.NullableDateTime ?? DateTime.MinValue)
      .FirstOrDefault()
      .Date)
  .ToArray();

\\ FAIL
_ = Query.All<Entity>()
  .Select(it => Storage.All<Entity>()
      .Select(e => e.NullableDateTime.Value)
      .FirstOrDefault()
      .Date)
  .ToArray();
alex-kulakov commented 1 year ago

Hello @letarak, do they fail with some exception?

letarak commented 1 year ago

Unable to translate 'Query.All().Select(it => Query.All().Select(e => e.LastLoginTime.Value).FirstOrDefault().Date)' expression. See inner exception for details.

Object reference not set to an instance of an object.

 at Xtensive.Orm.Linq.Expressions.MarkerExpression..ctor(Expression target, MarkerType markerType) in /_/Orm/Xtensive.Orm/Orm/Linq/Expressions/MarkerExpression.cs:line 28
   at Xtensive.Orm.Linq.Translator.GetMember(Expression expression, MemberInfo member, Expression sourceExpression) in /_/Orm/Xtensive.Orm/Orm/Linq/Translator.Expressions.cs:line 1410
   at Xtensive.Orm.Linq.Translator.VisitMemberAccess(MemberExpression ma) in /_/Orm/Xtensive.Orm/Orm/Linq/Translator.Expressions.cs:line 380
   at Xtensive.Linq.ExpressionVisitor`1.Visit(Expression e) in /_/Orm/Xtensive.Orm/Linq/ExpressionVisitor{TResult}.cs:line 125
   at Xtensive.Orm.Linq.Translator.VisitLambda(LambdaExpression le) in /_/Orm/Xtensive.Orm/Orm/Linq/Translator.Expressions.cs:line 145
   at Xtensive.Orm.Linq.Translator.BuildProjection(LambdaExpression le) in /_/Orm/Xtensive.Orm/Orm/Linq/Translator.Queryable.cs:line 1367
   at Xtensive.Orm.Linq.Translator.VisitSelect(Expression expression, LambdaExpression le) in /_/Orm/Xtensive.Orm/Orm/Linq/Translator.Queryable.cs:line 1355
   at Xtensive.Orm.Linq.Translator.VisitQueryableMethod(MethodCallExpression mc, QueryableMethodKind methodKind) in /_/Orm/Xtensive.Orm/Orm/Linq/Translator.Queryable.cs:line 230
   at Xtensive.Linq.QueryableVisitor.VisitMethodCall(MethodCallExpression mc) in /_/Orm/Xtensive.Orm/Linq/QueryableVisitor.cs:line 33
   at Xtensive.Orm.Linq.Translator.VisitMethodCall(MethodCallExpression mc) in /_/Orm/Xtensive.Orm/Orm/Linq/Translator.Expressions.cs:line 519
   at Xtensive.Linq.ExpressionVisitor`1.Visit(Expression e) in /_/Orm/Xtensive.Orm/Linq/ExpressionVisitor{TResult}.cs:line 125
   at Xtensive.Orm.Linq.Translator.Translate() in /_/Orm/Xtensive.Orm/Orm/Linq/Translator.Materialization.cs:line 32
   at Xtensive.Orm.Linq.QueryProvider.Translate(Expression expression, CompilerConfiguration compilerConfiguration) in /_/Orm/Xtensive.Orm/Orm/Linq/QueryProvider.cs:line 168