如何在 C# 中将 List<BsonDocument> 转换为 List<Class>
How to convert List<BsonDocument> to List<Class> in C#
这里我要做的是将 Bson 文档列表转换为 Class 列表。这样做的主要目的是从Json数据列表中过滤数据。我使用 MongoDb 作为数据库,使用 C# 处理数据。我在 MongoDb 中存储了一些数据,并尝试使用 FilterDefinition
过滤数据,如下所示:
进程 1
FileContext context = new FileContext();
var collection = context.Db.GetCollection<BsonDocument>("DBCollection");
var builder = Builders<BsonDocument>.Filter;
FilterDefinition<BsonDocument> Filter = builder.Eq("FileName", fileDetail.FileName) & builder.Eq("FileNumber", fileDetail.FileNumber.ToString());
var list = await collection.Find(Filter).ToListAsync();
这样我无法获取列表中的数据。因此,我尝试了另一种方式:
进程 2
FileContext context = new FileContext();
var collection = context.Db.GetCollection<BsonDocument>("DBCollection");
var list = await collection.Find(_ => true).ToListAsync();
List<MyClass> objList = null;
foreach (var item in objList)
{
objList = new List<MyClass>();
objList.Add(BsonSerializer.Deserialize<MyClass>(item));
}
if(objList.Count >0)
{
int count = objList.Where(x => x.FileName == "SOME_FILE_NAME" && x.FileNumber == 1).Count();
}
通过这种方式,我能够获取数据并能够过滤数据,但我知道这根本不是一个好的编程,因为如果将来数据量增加,这将有很多 waiting time
.
我的问题是:
PROCESS 1
有什么问题?
- 如何将
List<BsonDocument>
转换为 List<MyClass>
?
- 如何筛选
List<BsonDocument>
?
var collection = context.Db.GetCollection<BsonDocument>("DBCollection");
应该是:
var collection = context.Db.GetCollection<MyClass>("DBCollection");
这样您就可以使用 Find 方法来检查您的文件名和文件号,方法如下:
var objList = await collection.Find(x => x.FileName == "FILENAMEHERE" && x.FileNumber == 1).ToListAsync();
这里我要做的是将 Bson 文档列表转换为 Class 列表。这样做的主要目的是从Json数据列表中过滤数据。我使用 MongoDb 作为数据库,使用 C# 处理数据。我在 MongoDb 中存储了一些数据,并尝试使用 FilterDefinition
过滤数据,如下所示:
进程 1
FileContext context = new FileContext();
var collection = context.Db.GetCollection<BsonDocument>("DBCollection");
var builder = Builders<BsonDocument>.Filter;
FilterDefinition<BsonDocument> Filter = builder.Eq("FileName", fileDetail.FileName) & builder.Eq("FileNumber", fileDetail.FileNumber.ToString());
var list = await collection.Find(Filter).ToListAsync();
这样我无法获取列表中的数据。因此,我尝试了另一种方式:
进程 2
FileContext context = new FileContext();
var collection = context.Db.GetCollection<BsonDocument>("DBCollection");
var list = await collection.Find(_ => true).ToListAsync();
List<MyClass> objList = null;
foreach (var item in objList)
{
objList = new List<MyClass>();
objList.Add(BsonSerializer.Deserialize<MyClass>(item));
}
if(objList.Count >0)
{
int count = objList.Where(x => x.FileName == "SOME_FILE_NAME" && x.FileNumber == 1).Count();
}
通过这种方式,我能够获取数据并能够过滤数据,但我知道这根本不是一个好的编程,因为如果将来数据量增加,这将有很多 waiting time
.
我的问题是:
PROCESS 1
有什么问题?- 如何将
List<BsonDocument>
转换为List<MyClass>
? - 如何筛选
List<BsonDocument>
?
var collection = context.Db.GetCollection<BsonDocument>("DBCollection");
应该是:
var collection = context.Db.GetCollection<MyClass>("DBCollection");
这样您就可以使用 Find 方法来检查您的文件名和文件号,方法如下:
var objList = await collection.Find(x => x.FileName == "FILENAMEHERE" && x.FileNumber == 1).ToListAsync();