JuChom
JuChom

Reputation: 5999

Lambda expression not working with MongoDb C# Driver 1.4

I have updated my project with the MongoDb C# Driver 1.4 and one of my Lambda expression is not working anymore.

Before I was using MongoDb C# Driver 1.3.1 with Fluent Mongo to support Linq.

Here is my method:

IQueryable<T> IBackend<T>.Get(System.Linq.Expressions.Expression<Func<T, bool>> expression)
{
    return collection.AsQueryable<T>().Where(expression);
}

This lambda expression works:

var addedCustomer = repo.Get(c => c.FirstName == "Elwood").SingleOrDefault();

This one now throws an exception:

var updatedCustomer = repo.Get(c => c.Id == customer.Id).SingleOrDefault();

Thrown exception message:

Object reference not set to an instance of an object.

Update here is my stacktrace:

MongoDB.Bson.dll!MongoDB.Bson.Serialization.BsonClassMapSerializer.GetMemberSerializationInfo(string memberName) Line 253 + 0x3 bytes   C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.SelectQuery.GetSerializationInfoMember(MongoDB.Bson.Serialization.IBsonSerializer serializer, System.Linq.Expressions.MemberExpression memberExpression) Line 962 + 0xc bytes    C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.SelectQuery.GetSerializationInfo(MongoDB.Bson.Serialization.IBsonSerializer serializer, System.Linq.Expressions.Expression expression) Line 888 + 0xf bytes  C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.SelectQuery.GetSerializationInfo(System.Linq.Expressions.Expression expression) Line 880 + 0xf bytes C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.SelectQuery.BuildComparisonQuery(System.Linq.Expressions.BinaryExpression binaryExpression) Line 433 + 0x1f bytes    C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.SelectQuery.BuildQuery(System.Linq.Expressions.Expression expression) Line 768 + 0x37 bytes  C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.SelectQuery.BuildQuery() Line 113 + 0xc bytes    C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.SelectQuery.Execute() Line 122 + 0x9 bytes   C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.MongoQueryProvider.Execute(System.Linq.Expressions.Expression expression) Line 147 + 0xb bytes   C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.MongoQueryProvider.Execute<Lion.Tools.Tests.Backends.Entities.Customer>(System.Linq.Expressions.Expression expression) Line 131 + 0xc bytes  C#
[External Code] 
Lion.Tools.Tests.dll!Lion.Tools.Tests.Backends.MongoDbBackendTests.MongoDb_Can_Add_Select_And_Update_Test() Line 79 + 0x27f bytes   C#
[External Code] 

Any idea on what's going wrong?

Thanks

Upvotes: 2

Views: 2937

Answers (3)

Robert Stam
Robert Stam

Reputation: 12187

There is a bug in the 1.4 version of the C# driver that affects LINQ queries against inherited properties:

https://jira.mongodb.org/browse/CSHARP-418

This has been fixed in the master branch and the fix will be in the 1.4.1 release which we plan to release soon.

Upvotes: 6

werfu
werfu

Reputation: 380

Not much to help but, Where expression usually return something or throws a NotFound. In that case, this mean that either repo or customer is null.

If you think that updating the provider caused this, try to check the Where return value.

Upvotes: 0

Daniel Hilgarth
Daniel Hilgarth

Reputation: 174427

There is nothing that is obviously wrong. You need to check several things:

  1. Is it really throwing at the line you showed us?
  2. Is repo not null ?
  3. Is customer not null, e.g. does it work if you replace customer.Id with a fixed value like 1?
  4. Make sure repo.Get(...) never returns null.

Upvotes: 0

Related Questions