Mongodb c#查询LINQ中的条件

时间:2015-11-18 13:03:27

标签: c# mongodb linq

我的查询如下:

var query = from p in collection
where p.MinStockQuantity >= p.StockQuantity
select p;

我无法运行,因为我有例外:不支持的过滤器:([MinStockQuantity] >= [StockQuantity])

此查询也不起作用,同样的错误。

    var collection = database.GetCollection<Product>("Product");
    var builder = Builders<Product>.Filter;
    var filter = builder.Where(o => o.MinStockQuantity > o.StockQuantity);
    var query = collection.Find(filter).ToListAsync().Result;

如何比较2个字段?

2 个答案:

答案 0 :(得分:0)

所以我之前的回答显然是错误的。你应该使用该查询

db.products.find({ $where: "this.MinStockQuantity > this.StockQuantity" })

要在c#world中运行此查询,您需要使用BSON文档:

var doc = MongoDB.Bson.Serialization.BsonSerializer
         .Deserialize<BsonDocument>
         ("{$where: \"this.MinStockQuantity > this.StockQuantity\"}");
var result = collection.Find(new CommandDocument(doc));

我在我的测试应用程序中使用了该查询,它会大喊正确的结果。

答案 1 :(得分:0)

我知道我已经很晚了,但这很有效,试试这个:

  var collection = database.GetCollection<Product>("Product");
        var builder = Builders<Product>.Filter;
        var filter = builder.Gt(o => o.MinStockQuantity , o.StockQuantity);
        var query = collection.Find(filter).ToListAsync().Result;

这里的Gt大于。 还有其他各种方法,如Gte =大于等于等。