问题描述
嗨,我真的很努力地使用类和映射MongoDB文档,我承认我正在努力了解整个OOP,目前为止我的编码仅限于函数式编码。我的文档有很多字段,但是我暂时只对其中几个感兴趣。我用Python编写了没有类的程序,但我想用C#重新创建它。
我的Python代码返回两个字段。
cc_toolchain_config
我正在苦苦挣扎的C#代码
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,
我可以成功获取Bson文档,但是当我尝试使用类时,无法将其映射到变量/对象,尝试上面的代码会给我带来以下错误。
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
有人能指出我正确的方向吗?
解决方法
您将要使用类型化的集合。另外,为避免输入错误,您还可以通过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;
}