예제 #1
0
        public List <T> QueryList <T>(IDataReader reader) where T : class, new()
        {
            List <T> list = new List <T>();

            using (reader)
            {
                if (reader.Read())
                {
                    int fcount = reader.FieldCount;
                    INamedMemberAccessor[]            accessors = new INamedMemberAccessor[fcount];
                    DelegatedReflectionMemberAccessor drm       = new DelegatedReflectionMemberAccessor();
                    for (int i = 0; i < fcount; i++)
                    {
                        accessors[i] = drm.FindAccessor <T>(reader.GetName(i));
                    }

                    do
                    {
                        T t = new T();
                        for (int i = 0; i < fcount; i++)
                        {
                            if (!reader.IsDBNull(i))
                            {
                                accessors[i].SetValue(t, reader.GetValue(i));
                            }
                        }
                        list.Add(t);
                    } while (reader.Read());
                }
            }
            return(list);
        }
예제 #2
0
        public static void TestGetDelegate()
        {
            TestModel testModel = new TestModel()
            {
                Name = "testget", Value = 1
            };

            Type type = testModel.GetType();

            PropertyInfo namePerproty = type.GetProperties().FirstOrDefault(p => p.Name.Equals("Name", StringComparison.Ordinal));
            var          result       = DelegatedReflectionMemberAccessor.FindAccessor(type, namePerproty).GetValue(testModel);

#if DEBUG
            Console.WriteLine(result);
#endif
        }