public UIOMaticPagedResult GetPaged(string typeName, int itemsPerPage, int pageNumber, string sortColumn, string sortOrder, string searchTerm) { var currentType = Type.GetType(typeName); var tableName = (TableNameAttribute)Attribute.GetCustomAttribute(currentType, typeof(TableNameAttribute)); var uioMaticAttri = (UIOMaticAttribute)Attribute.GetCustomAttribute(currentType, typeof(UIOMaticAttribute)); var db = (Database)DatabaseContext.Database; if (!string.IsNullOrEmpty(uioMaticAttri.ConnectionStringName)) db = new Database(uioMaticAttri.ConnectionStringName); var query = new Sql().Select("*").From(tableName.Value); EventHandler<QueryEventArgs> tmp = BuildingQuery; if (tmp != null) tmp(this, new QueryEventArgs(tableName.Value, query)); if (!string.IsNullOrEmpty(searchTerm)) { int c = 0; foreach (var property in currentType.GetProperties()) { //if (property.PropertyType == typeof (string)) //{ string before = "WHERE"; if (c > 0) before = "OR"; var columnAttri = property.GetCustomAttributes().Where(x => x.GetType() == typeof(ColumnAttribute)); var columnName = property.Name; if (columnAttri.Any()) columnName = ((ColumnAttribute)columnAttri.FirstOrDefault()).Name; query.Append(before + " [" + columnName + "] like @0", "%" + searchTerm + "%"); c++; //} } } if (!string.IsNullOrEmpty(sortColumn) && !string.IsNullOrEmpty(sortOrder)) query.OrderBy(sortColumn + " " + sortOrder); else { var primaryKeyColum = "id"; var primKeyAttri = currentType.GetCustomAttributes().Where(x => x.GetType() == typeof(PrimaryKeyAttribute)); if (primKeyAttri.Any()) primaryKeyColum = ((PrimaryKeyAttribute)primKeyAttri.First()).Value; foreach (var property in currentType.GetProperties()) { var keyAttri = property.GetCustomAttributes().Where(x => x.GetType() == typeof(PrimaryKeyColumnAttribute)); if (keyAttri.Any()) primaryKeyColum = property.Name; } query.OrderBy(primaryKeyColum + " asc"); } EventHandler<QueryEventArgs> temp = BuildedQuery; if (temp != null) temp(this, new QueryEventArgs(tableName.Value,query)); var p = db.Page<dynamic>(pageNumber, itemsPerPage, query); var result = new UIOMaticPagedResult { CurrentPage = p.CurrentPage, ItemsPerPage = p.ItemsPerPage, TotalItems = p.TotalItems, TotalPages = p.TotalPages }; var items = new List<object>(); foreach (dynamic item in p.Items) { // get settable public properties of the type var props = currentType.GetProperties(BindingFlags.Public | BindingFlags.Instance) .Where(x => x.GetSetMethod() != null); // create an instance of the type var obj = Activator.CreateInstance(currentType); // set property values using reflection var values = (IDictionary<string, object>)item; foreach (var prop in props) { var columnAttri = prop.GetCustomAttributes().Where(x => x.GetType() == typeof(ColumnAttribute)); var propName = prop.Name; if (columnAttri.Any()) propName = ((ColumnAttribute)columnAttri.FirstOrDefault()).Name; if(values.ContainsKey(propName)) prop.SetValue(obj, values[propName]); } items.Add(obj); } result.Items = items; return result; }
public UIOMaticPagedResult GetPaged(string typeName, int itemsPerPage, int pageNumber, string sortColumn, string sortOrder) { var currentType = Type.GetType(typeName); var tableName = (TableNameAttribute)Attribute.GetCustomAttribute(currentType, typeof(TableNameAttribute)); var uioMaticAttri = (UIOMaticAttribute)Attribute.GetCustomAttribute(currentType, typeof(UIOMaticAttribute)); var db = (Database)DatabaseContext.Database; if (!string.IsNullOrEmpty(uioMaticAttri.ConnectionStringName)) db = new Database(uioMaticAttri.ConnectionStringName); var query = new Sql().Select("*").From(tableName.Value); if (!string.IsNullOrEmpty(sortColumn) && !string.IsNullOrEmpty(sortOrder)) query.OrderBy(sortColumn + " " + sortOrder); else { var primaryKeyColum = "id"; var primKeyAttri = currentType.GetCustomAttributes().Where(x => x.GetType() == typeof(PrimaryKeyAttribute)); if (primKeyAttri.Any()) primaryKeyColum = ((PrimaryKeyAttribute)primKeyAttri.First()).Value; foreach (var property in currentType.GetProperties()) { var keyAttri = property.GetCustomAttributes().Where(x => x.GetType() == typeof(PrimaryKeyColumnAttribute)); if (keyAttri.Any()) primaryKeyColum = property.Name; } query.OrderBy(primaryKeyColum + " asc"); } var p = db.Page<dynamic>(pageNumber, itemsPerPage, query); var result = new UIOMaticPagedResult { CurrentPage = p.CurrentPage, ItemsPerPage = p.ItemsPerPage, TotalItems = p.TotalItems, TotalPages = p.TotalPages }; var items = new List<object>(); foreach (dynamic item in p.Items) { // get settable public properties of the type var props = currentType.GetProperties(BindingFlags.Public | BindingFlags.Instance) .Where(x => x.GetSetMethod() != null); // create an instance of the type var obj = Activator.CreateInstance(currentType); // set property values using reflection var values = (IDictionary<string, object>)item; foreach (var prop in props) { var columnAttri = prop.GetCustomAttributes().Where(x => x.GetType() == typeof(ColumnAttribute)); var propName = prop.Name; if (columnAttri.Any()) propName = ((ColumnAttribute)columnAttri.FirstOrDefault()).Name; prop.SetValue(obj, values[propName]); } items.Add(obj); } result.Items = items; return result; }