2014-09-29 70 views
0

我的文檔結構包含一個字段作爲Bson數組。C#Linq驅動程序到mongoDB - Bson數組

我想從集合中獲取所有Bson數組值作爲字符串列表。

我知道下面的代碼是錯誤的,因爲我只得到了BSON陣列

public List<String> GetRecordsfromTime(DateTime dateTime) 
      { 
       return _collection.AsQueryable<SocialRecord>().Where(x => x.DateCreated > dateTime).Select(x => x.TermMonitorIds[1].ToString()).ToList(); 
      } 

能有一個人知道如何通過這些BSON陣列迭代得到的一切作爲字符串列表的第一個值。

回答

2

您在TermMonitorIds集合上使用索引器,因此您在SocialRecord集合中獲得了每個集合TermMonitorIds的第二個元素。

你會想,而不是做一個SelectMany像這樣:

return _collection.AsQueryable<SocialRecord>() 
        .Where(x => x.DateCreated > dateTime) 
        .SelectMany(x => x.TermMonitorIds.ToString()) 
        .ToList(); 

編輯:由於運說MongoDB中不允許查詢的SelectMany運營商。

// Evaluate the query 
var socialRecords = _collection.AsQueryable<SocialRecord>() 
           .Where(x => x.DateCreated > dateTime) 
           .ToList(); 

// Return desired results. 
return socialRecords.SelectMany(x => x.TermMonitorIds.ToString()); 
+1

是啊,我試過了,問題是MongoDB的LinQ在驅動程序不支持的SelectMany。錯誤 - 「SelectMany查詢運算符不受支持。」 – 2014-09-30 10:10:13

+0

看我的編輯。 :) – Cameron 2014-09-30 13:28:25

0

我用下面的代碼來解決這個問題:

return _collection.AsQueryable<SocialRecord>() 
          .Where(x => x.DateCreated > dateTime) 
          .Select(z => z.TermMonitorIds.Select(x => x.ToString()).ToList()) 
          .ToList() 
          .SelectMany(x => x) 
          .ToList();