2017-01-19 7 views
1

からすべての文書を取得する:、 これは、しかし、私はそれを考え出す苦労しています、非常に単純であるかもしれないプロパティコンボ

は私が検索するために必要な製品のリストが含まれ List<Tuple<String, String>>を持っており、 1回のリクエストでそのリストに表示されているすべての製品のすべてのドキュメントを取得したいと考えています。

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

私は(リストから各タプルのためのフィルタを作成するヘルプメソッドを記述しますあなたはを構築することができた後

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

:それはだとフィルタ:SKU = Item1 && SupplierId == Item2

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

:フィルタリストからすべてのタプルのためのアイテムを取得します

関連する問題