我在画布应用中使用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属性(包含不属于某个粉丝专页的用户的uid。
“选择”只会将所有动态对象转换为List<string>
FQL部分正常工作,因为我可以在调试器中看到结果。
问题在于Select
,我无法使其发挥作用。
如何修复动态lambda ??? (请不要只是告诉我使用foreach,这是我目前正在做的事情)
答案 0 :(得分:1)
问题是扩展方法不能用于动态对象。将查询结果转换为JsonArray,然后可以在JsonArray上使用linq表达式。
var result = (JsonArray)fb.Fql(query);
return result.Select((Func<dynamic, string>)(x => x.uid)).ToList();