public IEnumerator <TResult> GetEnumerator() { while (Reader.Read()) { TRowType item = Activator.CreateInstance <TRowType>(); var typeData = KnownTypeData.GetTypeData(typeof(TRowType)); var currentKeys = Reader.GetCurrentKeys(); foreach (var k in currentKeys) { var p = typeData.PropertiesByFieldName[k]; var realPropertyName = k; var fqlFieldName = p.FqlFieldName; var propInfo = p.PropertyInfo; var value = Reader[fqlFieldName, propInfo.PropertyType]; if (value != null) { propInfo.SetValue(item, value, null); } } if (Selector != null) { yield return(Selector(item)); } else { yield return((TResult)(object)item); //TODO: } } }
/// <summary> /// Performs a generic FQL query against facebook /// </summary> public IEnumerable <T> PerformGenericFql <T>(string fql) where T : class { var items = new List <T>(); fql = FixQuery(fql); var result = Provider.ExecuteFqlQuery(fql); var reader = new FacebookDataReader(result); var td = KnownTypeData.GetTypeData(typeof(T)); while (reader.Read()) { T item = null; var elem = Activator.CreateInstance <T>(); var fetched = false; if (td.IdentityProperty != null) { var idVal = reader[td.IdentityProperty.FqlFieldName]; item = GetObject <T>(idVal, false); fetched = item != null; } if (!fetched) { item = Activator.CreateInstance <T>(); //item.DataContext = this; if (item != null && td.IdentityProperty != null) { StoreObject <T>(item, reader[td.IdentityProperty.FqlFieldName]); } } foreach (var pData in td.Properties) { pData.Value.PropertyInfo.SetValue(item, reader[pData.Value.FqlFieldName], null); } items.Add(item); } return(items); }