2

プロジェクトをMongoDbC#Driver 1.4で更新しましたが、Lambda式の1つが機能しなくなりました。

LinqをサポートするためにFluentMongoでMongoDbC#Driver1.3.1を使用する前。

これが私の方法です:

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

このラムダ式は機能します:

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

これで例外がスローされます。

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

スローされた例外メッセージ:

Object reference not set to an instance of an object.

ここで更新は私のスタックトレースです:

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] 

何が悪いのかについて何か考えはありますか?

ありがとう

4

3 に答える 3

6

継承されたプロパティに対するLINQクエリに影響を与えるC#ドライバーの1.4バージョンにはバグがあります。

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

これはマスターブランチで修正されており、まもなくリリースされる予定の1.4.1リリースで修正される予定です。

于 2012-04-11T15:03:44.297 に答える
0

明らかに間違っていることは何もありません。あなたはいくつかのことをチェックする必要があります:

  1. あなたが見せてくれたラインに本当に投げかけているのですか?
  2. そうではrepoありませんnullか?
  3. そうではcustomerありません。たとえば、次のような固定値nullに置き換えると機能しますか?customer.Id1
  4. repo.Get(...)決して返さないようにしてくださいnull
于 2012-04-11T14:20:55.487 に答える
0

あまり役に立ちませんが、式が通常何かを返すか、NotFoundをスローする場合。その場合、これはリポジトリまたは顧客のいずれかがnullであることを意味します。

プロバイダーの更新がこれを引き起こしたと思われる場合は、Whereの戻り値を確認してみてください。

于 2012-04-11T14:22:27.840 に答える