从 属性-combo 获取所有文档
Getting all documents from a property-combo
这可能很简单,但我很难弄清楚:
我有一个 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;
我假设您的 StockDoc class 为:
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()
这可能很简单,但我很难弄清楚:
我有一个 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;
我假设您的 StockDoc class 为:
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()