2010-12-06 6 views
0

キャンバスアプリでFacebook C#SDKを使用しています。FacebookのC#SDKで動的なLinqのRuntimeBinderException

私は次の例外を取得
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(); 
} 

このコードを実行している...:

  • それはにFQLクエリを実行します。

    RuntimeBinderException: Cannot perform runtime binding on a null reference 
    

    コードは、次の処理を行いJsonArrayをそれぞれJsonObjectとし、それぞれにuidプロパティ(thいくつかのファンページのファンではないユーザーのユーザー。

  • 選択はちょうど私は、デバッガで結果を見ることができるようにFQL部分だけで正常に動作するList<string>

にすべての動的オブジェクトに変換します。 問題はSelectで問題になります。

どのように動的ラムダを修正できますか? (ちょうど私が今現在行っているforeachを使用するように教えてください)

答えて

1

問題は、拡張メソッドを動的オブジェクトで使用できないことです。クエリの結果をJsonArrayにキャストし、次にJsonArrayでlinq式を使用できます。

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