LINQ translation error when RegisterSerializer was called with a serializer for the wrong value type

XMLWordPrintableJSON

    • Type: Task
    • Resolution: Done
    • Priority: Major - P3
    • None
    • Affects Version/s: 2.4.2
    • Component/s: Serialization
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      mongocsharpdriver 2.4.2

      Sample:

      namespace ConsoleApplication
      {
          using System;
          using System.Linq;
      
          using MongoDB.Bson.Serialization.Serializers;
          using MongoDB.Driver;
      
          class Program
          {
              static void Main(string[] args)
              {
                  MongoDB.Bson.Serialization.BsonSerializer.RegisterSerializer(typeof(DateTime), new DateTimeSerializer(DateTimeKind.Local));
                  MongoDB.Bson.Serialization.BsonSerializer.RegisterSerializer(typeof(DateTime?), new DateTimeSerializer(DateTimeKind.Local));
      
                  new MongoClient("mongodb://localhost/testdb")
                      .GetDatabase("testdb")
                      .GetCollection<TestItem>(typeof(TestItem).Name)
                      .AsQueryable()
                      .Count(e => e.Date == null);
              }
          }
          
          public sealed class TestItem
          {
              public Guid Id { get; set; }
              
              public DateTime? Date { get; set; }
          }
      }
      

      Exception:

      An unhandled exception of type 'System.InvalidOperationException' occurred in System.Core.dll
      
      Additional information: The operands for operator 'Equal' do not match the parameters of method 'op_Equality'.
      
         at System.Linq.Expressions.Expression.GetMethodBasedBinaryOperator(ExpressionType binaryType, Expression left, Expression right, MethodInfo method, Boolean liftToNull)
         at System.Linq.Expressions.Expression.Equal(Expression left, Expression right, Boolean liftToNull, MethodInfo method)
         at System.Linq.Expressions.Expression.MakeBinary(ExpressionType binaryType, Expression left, Expression right, Boolean liftToNull, MethodInfo method, LambdaExpression conversion)
         at System.Linq.Expressions.BinaryExpression.Update(Expression left, LambdaExpression conversion, Expression right)
         at System.Linq.Expressions.ExpressionVisitor.VisitBinary(BinaryExpression node)
         at MongoDB.Driver.Linq.Processors.SerializationBinder.VisitBinary(BinaryExpression node)
         at System.Linq.Expressions.BinaryExpression.Accept(ExpressionVisitor visitor)
         at MongoDB.Driver.Linq.Processors.SerializationBinder.Visit(Expression node)
         at MongoDB.Driver.Linq.Processors.PipelineBindingContext.Bind(Expression node)
         at MongoDB.Driver.Linq.Processors.BinderHelper.BindWhere(PipelineExpression pipeline, IBindingContext bindingContext, LambdaExpression lambda)
         at MongoDB.Driver.Linq.Processors.Pipeline.MethodCallBinders.CountBinder.Bind(PipelineExpression pipeline, PipelineBindingContext bindingContext, MethodCallExpression node, IEnumerable`1 arguments)
         at MongoDB.Driver.Linq.Processors.MethodInfoMethodCallBinder`1.Bind(PipelineExpression pipeline, TBindingContext bindingContext, MethodCallExpression node, IEnumerable`1 arguments)
         at MongoDB.Driver.Linq.Processors.PipelineBinderBase`1.BindMethodCall(MethodCallExpression node)
         at MongoDB.Driver.Linq.Processors.PipelineBinderBase`1.Bind(Expression node)
         at MongoDB.Driver.Linq.Processors.Pipeline.PipelineBinder.Bind(Expression node, IBsonSerializerRegistry serializerRegistry)
         at MongoDB.Driver.Linq.MongoQueryProviderImpl`1.Prepare(Expression expression)
         at MongoDB.Driver.Linq.MongoQueryProviderImpl`1.Translate(Expression expression)
         at MongoDB.Driver.Linq.MongoQueryProviderImpl`1.Execute(Expression expression)
         at MongoDB.Driver.Linq.MongoQueryProviderImpl`1.Execute[TResult](Expression expression)
         at System.Linq.Queryable.Count[TSource](IQueryable`1 source, Expression`1 predicate)
         at ConsoleApplication11.Program.Main(String[] args) in c:\users\gushin\documents\visual studio 2015\Projects\ConsoleApplication11\ConsoleApplication11\Program.cs:line 16
         at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
         at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
         at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
         at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
         at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
         at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
         at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
         at System.Threading.ThreadHelper.ThreadStart()
      

            Assignee:
            Robert Stam
            Reporter:
            Gushchin Anton
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: