RuntimeBinderException动态Linq与Facebook C#SDK

问题描述:

我在画布应用程序中使用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,这是我目前正在做的)

问题是扩展方法不能用于动态对象。将查询结果转换为JsonArray,然后可以在JsonArray上使用linq表达式。

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