繁体   English   中英

C# MongoDB 映射类

[英]C# MongoDB mapping class

嗨,我真的在为类和映射 MongoDB 文档而苦苦挣扎,我承认我正在努力理解整个 OOP 的事情,目前我的编码仅限于功能性编码。 我的文档有很多字段,但我暂时只对其中的几个感兴趣。 我在没有类的情况下用 Python 编写了我的程序,但我想用 C# 重新创建它。

我的 Python 代码返回这两个字段。

 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 文档,但是当我尝试使用一个类时,我无法将它映射到一个变量/对象,尝试上面的代码给了我以下错误。

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 工作正常,但尝试将其作为类对象返回给我这个错误。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM