![](/img/trans.png)
[英]How to define a default discriminator for a polymorphic class mapping in 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.