【发布时间】:2016-11-11 12:47:44
【问题描述】:
我正在尝试使用另一个对象 (MyObject) 上的属性值来更新对象数组中每个对象的属性。我不清楚是否打电话:
my_objects_collection = m_database.GetCollection(MY_OBJECTS_COLLECTION_NAME);
有任何性能影响,所以我尝试只调用一次并在 For... 循环中针对它执行一个新的 Find 命令(每次迭代都有一个修改的过滤器),见下文:
MyObject my_object = null;
IMongoCollection<MyObject> my_objects_collection = null;
if (objects != null)
{
my_objects_collection = m_database.GetCollection<MyObject>(MY_OBJECTS_COLLECTION_NAME);
for (int i = 0; i < objects.Count; i++)
{
Expression<Func<MyObject, bool>> filter = x => (x.ID == objects[i].ID) && (x.LanguageCode == language_code);
my_object = await my_objects_collection.Find(filter).FirstOrDefaultAsync();
if (my_object != null)
{ objects[i].DisplayName = my_object.Name; }
}
}
但是,上面的代码抛出了以下异常:
值不能为空。 参数名称:集合
在 MongoDB.Driver.Core.Misc.Ensure.IsNotNull[T](T value, String paramName)
在 MongoDB.Driver.IMongoCollectionExtensions.Find[TDocument](IMongoCollection1 collection, Expression1 过滤器,FindOptions 选项)
如果我将 my_objects_collection 赋值移动到 for 循环中,以便在每次迭代时调用它,则代码可以正常工作而不会引发任何异常。
因此我的问题是,在对 MongoCollection 引用 (my_objects_collection) 执行 Find(或任何其他操作)之后会发生什么情况?
如果有人能对此提供一些见解,我将不胜感激。我可以继续,因为我的应用程序正在运行,但我真的很想知道为什么它会抛出一个异常,表明集合为空,以我自己的理解。
提前谢谢你,
安德鲁
【问题讨论】: