C# MongoDB 映射 class

C# MongoDB mapping class

你好,我真的在努力使用 classes 和映射 MongoDB 文档,我承认我在努力理解整个 OOP 的东西,到目前为止我的编码仅限于目前只是功能编码。我的文档有很多字段,但我暂时只对其中的几个感兴趣。我在 Python 中编写了我的程序,没有 classes 但我想在 C# 中重新创建它。

我的 Python 代码 return 这两个字段。

 stock_details = collection.find_one({'Stock Number' : stock_number})
        #print(stock_details.keys()) 
        val1 = stock_details['Stock Number']
        val2 = stock_details['Qty In Stock']

        return val1, val2,

我正在努力处理的 C# 代码

 public static StockItem GetStockItem(string StockNumber)
    {
        var client = new MongoClient()
        var db = client.GetDatabase("storesdb");
        var collection = db.GetCollection<BsonDocument>("storeslist");
        var filter = Builders<StockItem>.Filter.Eq("Stock Number", StockNumber);
        var findfilter = collection.Find(filter).FirstOrDefault();
        var returnValue = findfilter;
        return returnValue;
    }


    [BsonIgnoreExtraElements]
    public class StockItem
    {
        [BsonElement("Stock Number")]
        public string stockNumber { get; set; }

        [BsonElement("Qty In Stock")]
        public int qtyInStock { get; set; }

    }

我可以成功获取 Bson 文档,但是当我尝试使用 class 时,我无法将其映射到 variable/object,尝试上面的代码会出现以下错误。

Severity    Code    Description Project File    Line    Suppression State
Error   CS1503  Argument 2: cannot convert from 'MongoDB.Driver.FilterDefinition<Program.StockItem>' to 'System.Linq.Expressions.Expression<System.Func<MongoDB.Bson.BsonDocument, bool>>'  Storesincsharp  C:\Users\zaks\source\repos\Storesincsharp\Storesincsharp\Program.cs 46  Active

将文档过滤器更改为 Bson 可以正常工作,但尝试将其 return 作为 class 对象却给我这个错误。

Severity    Code    Description Project File    Line    Suppression State
Error   CS0029  Cannot implicitly convert type 'MongoDB.Bson.BsonDocument' to 'Program.StockItem'   Storesincsharp  C:\Users\zaks\source\repos\Storesincsharp\Storesincsharp\Program.cs 48  Active

有人能给我指出正确的方向吗?

您将需要使用类型化集合。此外,为避免拼写错误,您还可以通过 linq 而不是字符串名称来指定过滤器名称。当您重构 类 时,它也会有所帮助。示例:

    public static StockItem GetStockItem(string StockNumber)
    {
        var client = new MongoClient();
        var db = client.GetDatabase("storesdb");
        var collection = db.GetCollection<StockItem>("storeslist");  // Typed collection.
        var filter = Builders<StockItem>.Filter.Eq(x=> x.stockNumber, StockNumber); // Referenced property name.
        StockItem returnValue = collection.Find(filter).FirstOrDefault();
        return returnValue;
    }