直接カラム名を書いてしまうことが多いけど、リフレクションで作ってみる。
1 2 3 4 5 |
public List<DataGridViewModel> CreateModel(Query query) { var temp = new BaseDbLoadEvent().CreateModel(query, new DataGridViewModel()); return temp.ConvertAll(x => (DataGridViewModel)x); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public class BaseDbLoadEvent { public List<IDataGridViewModel> CreateModel(Query query, IDataGridViewModel targetModel) { var modelType = targetModel.GetType(); var models = new List<IDataGridViewModel>(); List<string> propNameList = new List<string>(modelType.GetProperties().Select(x => x.Name)); var dt = query.ExecuteQuery(); for (int r = 0; r < dt.Rows.Count; r++) { var ci = modelType.GetConstructor(System.Type.EmptyTypes); var model = (IDataGridViewModel)ci.Invoke(null); // あるいは //var model = (IDataGridViewModel)Activator.CreateInstance(targetModel.GetType()); foreach (var propName in propNameList) { var columnName = propName; var fi = modelType.GetProperty(propName); fi.SetValue(model, dt.Rows[r][columnName]); } models.Add(model); } return models; } } |