2010-12-06 55 views
0

我在畫布應用程序中使用Facebook C#SDK。RuntimeBinderException動態Linq與Facebook C#SDK

運行此代碼...

public IEnumerable<string> GetFansIds(string pageId, IEnumerable<string> userIds) 
{ 
    if (userIds.Count() == 0) 
     return new List<string>(); 

    var fb = new FacebookApp(); 
    string query = String.Format("select uid from page_fan where uid IN ({0}) and page_id = {1}", 
     String.Join(",", userIds), 
     pageId 
    ); 
    dynamic result = fb.Fql(query); 
    return result.Select((Func<dynamic, string>)(x => x.uid)).ToList(); 
} 

我得到以下異常:

RuntimeBinderException: Cannot perform runtime binding on a null reference 

的代碼執行以下操作:

  • 它執行FQL查詢得到一個JsonArray包含JsonObject每個都帶有一個uid屬性(包含th不屬於某個粉絲專頁的用戶的用戶。

  • 的選擇剛纔的所有動態對象轉換爲List<string>

的FQL部分只是正常工作,因爲我可以看到在調試的結果。 問題出在Select,我無法使它工作。

我該如何解決動態拉姆達? (請不要只是告訴我使用foreach,這是我目前正在做的)

回答

1

問題是擴展方法不能用於動態對象。將查詢結果轉換爲JsonArray,然後可以在JsonArray上使用linq表達式。

var result = (JsonArray)fb.Fql(query); 
return result.Select((Func<dynamic, string>)(x => x.uid)).ToList();