2016-09-20 6 views
2

mongodb [BsonExtraElements]機能を使用していくつかの動的データを拡張しましたが、残念ながらmongodb C#ドライバでクエリを作成できません。ここでLinq経由でMongoDBのBsonExtraElementsを照会するには

は私のモデルクラスである:ここで

public class MongoProductEntity 
{ 
    public MongoProductEntity() 
    { 
     AdditionalColumns = new BsonDocument { AllowDuplicateNames = false }; 
    } 
    [BsonExtraElements] 
    public BsonDocument AdditionalColumns { get; set; } 
    public string BrandName { get; set; } 
} 

は、クエリの一部です:

 var productEntity = new MongoProductEntity() 
     { 
      BrandName = "Brand" 
     };    
     productEntity.AdditionalColumns.Add("testProperty", 6); 
     productEntity.AdditionalColumns.Add("testProperty2", "almafa"); 

     await productEntityRepo.InsertAsync(productEntity); 
     var qq = productEntityRepo.Where(x => x.AdditionalColumns["testProperty"] == 6).ToList(); 

このクエリは、私は新しい名称のプロパティを照会しようとしているがあれば、データベースから誰の要素を返しませんすべてうまくいっています!

似たような状況に遭遇したか、またはそのクエリがウォーキングしていない理由を知っている人はいますか? Thxで事前に!

productEntityRepoのタイプはMongoDb MongoProductEntityコレクションのラッパーであり、このラッパーはそのコレクションをQueryableとして返します。私はMongoDb 3.2.9と最新のC#Driver 2.2.4を使用しています。

答えて

1

FilterDefinition<T>に.Inject()メソッドを使用することが可能であるC#のドライバのversion 2.3ので:

var filter = Builders<BsonDocument>.Filter.Eq("testProperty2", "almafa"); 
productEntityRepo.Where((dbModel) => dbModel.BrandName == "Brand" && filter.Inject()); 

これは、あなたがLINQを経由して記述することは、困難、または不可能なフィルタを表現できるようにする必要があります。あなたは2.2.4から新しいバージョンに更新する必要があります。

+0

ハレイ、それは働いた!どうもありがとうございました! –

関連する問題