2016-09-20 2 views
2

Я использовал функцию mongodb [BsonExtraElements], чтобы расширить класс некоторых динамических данных, но, к сожалению, я не могу создать запрос с помощью драйвера mongodb C#.Как запросить BsonExtraElements в MongoDB через Linq

Вот мой класс модели:

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 заранее!

Просто короткое замечание здесь: тип продуктаEntityRepo является оберткой коллекции MongoDb MongoProductEntity, и эта оболочка возвращает коллекцию как Queryable, вот и все. Я использую MongoDb 3.2.9, с последним C# Driver 2.2.4.

ответ

1

С version 2.3 драйвера C# можно использовать метод .Inject() на FilterDefinition<T>:

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

Это позволит вам выразить фильтры, которые трудно или невозможно, чтобы описать с помощью LINQ. Однако вам нужно будет обновить с версии 2.2.4 до более новой версии.

+0

Ура, это сработало! Большое спасибо! –

Смежные вопросы