而不是從零開始編寫ExpandoObject
這種動態類型的功能,你可以從Slazure這樣的動態ORM或ODM中獲益,MongoDB支持仍處於內部測試階段,但應儘快公開發布。這裏是一個Slazure Linq查詢從「TestCustomers」集合返回一些文件和每個文件屬性名稱寫入到控制檯的例子:
using SysSurge.Slazure.MongoDB.Linq;
using SysSurge.Slazure.Core;
using SysSurge.Slazure.Core.Linq.QueryParser;
public void EnumProperties()
{
// Get a reference to the collection
dynamic storage = new QueryableStorage<DynDocument>("mongodb://user:[email protected]/MongoDBExample");
QueryableCollection<DynDocument> collection = storage.TestCustomers;
// Build collection query
var queryResult = collection.Where("SignedUpForNewsletter = true and Age < 22");
foreach (DynDocument document in queryResult)
{
foreach (KeyValuePair<string, IDynProperty> keyValuePair in document)
{
Console.WriteLine(keyValuePair.Key);
}
}
}
如果你需要得到實際的BsonDocument
對象,那麼你可以使用通過調用Document
方法從Slazure DynDocument
對象中獲得它,示例如下:
foreach (DynDocument document in queryResult)
{
BsonDocument bsonDoc = document.Document
Console.WriteLine(bsonDoc["someProperty"].AsString());