2017-01-19 3 views
1

Это может быть очень простой, но я с трудом выяснить это:Получение всех документов из свойства-комбо

У меня есть List<Tuple<String, String>>, который содержит список продуктов, которые мне нужно искать, и Я хотел бы получить все документы всех продуктов, которые представлены в этом списке по одному запросу.

Item1 является SKU продукта, но поскольку он может быть дублирующим SKU, у меня также есть Item2, который содержит то, в каком именно SupplierId он должен искать.

Моя задача - создать запрос с помощью драйвера MongoDB C#, чтобы получить данные, кто может помочь?

Я использую новую версию драйвера 2.3.0, которая не имеет большой справки по этой теме.

Вот код, который я до сих пор:

var collection = _database.GetCollection<StockDoc>("stock"); 
var result = collection.Find().ToListAsync().Result; 

ответ

1

Я полагаю, ваш класс StockDoc как:

public class StockDoc 
{ 
    public ObjectId Id { get; set; } 
    public string SKU { get; set; } 
    public string SupplierId { get; set;} 
} 

Я хотел бы написать метод помощи, который создает фильтр для каждого кортежа из списка (это и фильтр: SKU = Item1 && SupplierId == Item2):

public FilterDefinition<StockDoc> BuildFilter(Tuple<String, String> p) 
{ 
    return Builders<StockDoc>.Filter.And(
       Builders<StockDoc>.Filter.Eq(x=>x.SKU, p.Item1), 
       Builders<StockDoc>.Filter.Eq(x=>x.SupplierId, p.Item2)); 
} 

После этого вы можете создать Or фильтр, чтобы получить пункты для всех кортежей из списка:

var p = new List<Tuple<String, String>> { 
     Tuple.Create("a", "1"), 
     Tuple.Create("b", "1"), 
     Tuple.Create("d", "2")}; 

var filter = Builders<StockDoc>.Filter.Or(p.Select(BuildFilter)); 

После того, что вы могли бы получить данные с помощью этого фильтра:

collection.Find(filter).ToList() 
Смежные вопросы