Example #1
0
        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:
                }
            }
        }
Example #2
0
        /// <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);
        }