Example #1
0
        /// <summary>
        /// Veri tabanındaki kayıtları istenen tipe göre liste şeklinde döndürür
        /// </summary>
        /// <typeparam name="T">Geri Dönüş Tipi</typeparam>
        /// <param name="rdr">Veri tabanı Datareader nesnesi</param>
        /// <returns></returns>
        public static List <T> Liste <T>(this DbDataReader rdr, ref List <string> YakalanamayanAlanlar, bool BuyukKucukHarfDuyarli = true, bool ConvertType = true)
        {
            var Kayitlar  = rdr.Liste(BuyukKucukHarfDuyarli, ConvertType);
            var Sonuc     = new List <T>();
            var Propeties = typeof(T).GetProperties();

            foreach (var Kayit in Kayitlar)
            {
                var model = Activator.CreateInstance <T>();
                if (IsPrimitive(typeof(T)))
                {
                    Sonuc.Add(Kayit[Kayit.Keys.First()]);
                }
                else
                {
                    foreach (var prop in Propeties)
                    {
                        if (prop.GetCustomAttributes(typeof(NotMappedAttribute), false).Count() > 0)
                        {
                            continue;
                        }
                        object val;
                        if (Kayit.TryGetValue(BuyukKucukHarfDuyarli ? prop.Name : prop.Name.ToLower(), out val))
                        {
                            if (val == null)
                            {
                                continue;
                            }
                            if (ConvertType)
                            {
                                var Type = prop.PropertyType;
                                if (Type.IsEnum)
                                {
                                    Type = typeof(int);
                                }
                                if (Type.IsGenericType && Type.GetGenericTypeDefinition() == typeof(Nullable <>))
                                {
                                    //nulable tipler için tip düzeltme?
                                }
                                else
                                {
                                    val = Convert.ChangeType(val, Type);
                                }
                            }
                            prop.SetValue(model, val);
                        }
                    }
                }
                Sonuc.Add(model);
            }
            if (Kayitlar.Count.Equals(0))
            {
                return(Sonuc);
            }
            YakalanamayanAlanlar.AddRange(Kayitlar[0].Keys.ToList().Where(x => Propeties.FirstOrDefault(y => (BuyukKucukHarfDuyarli ? y.Name : y.Name.ToLower()).Equals(x)) == null).ToArray());
            return(Sonuc);
        }