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); }
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 }