2016-09-20 2 views
2

mongodb [BsonExtraElements] 기능을 사용하여 클래스를 일부 동적 데이터로 확장했지만 불행히도 mongodb C# 드라이버에서 쿼리를 만들 수 없습니다. 나는 한 brandname 속성을 쿼리하기 위해 노력하고있어하지만 경우,Linq를 통해 MongoDB에서 BsonExtraElements를 쿼리하는 방법

 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(); 

이 쿼리는 데이터베이스로부터 하나 개의 요소를 반환 : 여기

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

쿼리 부분입니다 : 여기

내 모델 클래스 모든 것이 잘 작동합니다!

비슷한 상황에 직면 한 사람이 있습니까? 아니면 해당 쿼리가 작동하지 않는 이유를 아는 사람이 있습니까? Thx 사전에!

여기에 짧은 설명이 있습니다. productEntityRepo의 유형은 MongoDb MongoProductEntity 컬렉션에 대한 래퍼이며이 래퍼는 컬렉션을 쿼리 가능으로 반환합니다. MongoDb 3.2.9와 최신 C# Driver 2.2.4를 사용하고 있습니다.

답변

1

는 C# 드라이버의 version 2.3 때문에 FilterDefinition<T>에 .Inject() 메소드를 사용할 수있다 :

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

이것은 당신이 LINQ를 통해 설명하기 어렵거나 불가능한 필터를 표현할 수 있도록해야한다. 2.2.4에서 최신 버전으로 업데이트해야합니다.

+0

만세! 고마워요! –

관련 문제