ExpressionNotSupportedException when a $set stage expression uses ToList method

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Fixed
    • Priority: Unknown
    • 3.7.1
    • Affects Version/s: 3.7.0
    • Component/s: Aggregation, LINQ
    • None
    • None
    • Fully Compatible
    • Dotnet Drivers
    • Not Needed
    • None
    • None
    • None
    • None
    • None
    • None

      Summary

      Some $set expressions throw an ExpressionNotSupportedException in version 3.7.0, but did not in version 3.6.0 and below. This exception is only thrown if the type parameters for PipelineStageDefinitionBuilder.Set are the same. If they are different, no exception is thrown. Below is an example stack trace and a C# console application demonstrating the issue.

       

      
      

      _MongoDB.Driver.Linq.ExpressionNotPipelineStageDefinitionBuilder.SetSupportedException: Expression not supported: source.List1.Concat(source.List2).ToList() because member and value serializers are not compatible.
         at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToSetStageTranslators.ExpressionToSetStageTranslator.ThrowIfMemberAndValueSerializersAreNotCompatible(Expression expression, IBsonSerializer memberSerializer, IBsonSerializer valueSerializer)
         at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToSetStageTranslators.ExpressionToSetStageTranslator.CreateComputedField(TranslationContext context, IBsonDocumentSerializer documentSerializer, MemberInfo member, Expression valueExpression)
         at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToSetStageTranslators.ExpressionToSetStageTranslator.TranslateNewWithOptionalMemberInitializers(TranslationContext context, IBsonDocumentSerializer documentSerializer, MemberInitExpression memberInitExpression)
         at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToSetStageTranslators.ExpressionToSetStageTranslator.Translate(TranslationContext context, IBsonSerializer inputSerializer, LambdaExpression expression)
         at MongoDB.Driver.Linq.LinqProviderAdapter.TranslateExpressionToSetStage[TDocument,TFields](Expression`1 expression, IBsonSerializer`1 documentSerializer, IBsonSerializerRegistry serializerRegistry, ExpressionTranslationOptions translationOptions)
         at MongoDB.Driver.ExpressionSetFieldDefinitions`2.Render(RenderArgs`1 args)
         at MongoDB.Driver.PipelineStageDefinitionBuilder.<>c_DisplayClass55_0`1.<Set>b_0(RenderArgs`1 args)
         at MongoDB.Driver.DelegatedPipelineStageDefinition`2.Render(RenderArgs`1 args)
         at Program.<Main>$(String[] args) in Program.cs:line 18_

       

      How to Reproduce

      Example.zip

            Assignee:
            Oleksandr Poliakov
            Reporter:
            Matthew DeJonge
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: