2017-01-19 130 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過濾器,以獲得項目的列表中的所有元組:

collection.Find(filter).ToList() 

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

之後,你可以用此過濾器讓您的數據