2017-01-19 131 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)); 

之后,你可以用此过滤器让您的数据