Как преобразовать MOngoDB.BsonDocumnet в список коллекции в C #? - PullRequest
1 голос
/ 23 декабря 2011

У меня есть MongoDB.BsonDocument, я хочу преобразовать этот BsonDocument в список коллекций, как я могу это сделать, я вставляю свой пример кода ниже ...

try
{
    var server = MongoServer.Create("localhost:27017");
    var db = server.GetDatabase(DATABASE);
    var riskdata = db.GetCollection("TABLESAMPLE");
    var query = Query.EQ("Name", null);
    var results = riskdata.Find(query);
    gridsample.ItemsSource = results;
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

но приведенный выше код не работает для меня .... "_ id" только привязка к сетке, остальные поля не приходят.

Ответы [ 2 ]

1 голос
/ 21 февраля 2014

Вы можете связать BsonDocument с любой структурой, преобразовав BsonBocument в таблицу данных без объявления класса

    public DataTable GetDataTableFromMongoCursor(MongoCursor cursor)
    {
        if (cursor != null && cursor.Count() > 0)
        {

            DataTable dt = new DataTable(cursor.ToString());
            foreach (BsonDocument doc in cursor)
            {

                foreach (BsonElement elm in doc.Elements)
                {
                    if(!dt.Columns.Contains(elm.Name))
                    {
                        dt.Columns.Add(new DataColumn(elm.Name));
                    }

                }
                DataRow dr = dt.NewRow();
                foreach (BsonElement elm in doc.Elements)
                {
                    dr[elm.Name] = elm.Value;

                }
                dt.Rows.Add(dr);
            }
            return dt;

        }
         return null;
    }
1 голос
/ 23 декабря 2011

Вероятно, ваша сетка не понимает BsonDocument.

Вам нужно взглянуть на сериализацию этих документов BSON в классы .

Это будет выглядеть примерно так:

class MyDocument { 
    public string name { get; set; }

    public int a { get; set; }

    public int b { get; set; }
}

Тогда вы измените свою находку, чтобы вернуть эти вещи

IEnumerable<MyDocument> results = riskdata.FindAs<MyDocument>(query).ToList();
gridsample.ItemsSource = results;

Теперь у вас будет класс со свойствами, которые ваша сетка может читать.

...