using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; namespace CK.SCP.Models { public static class EntitiesHelper { public static string GetPropertiesString(T t,bool withName = true) { var peroperties = t.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); var sb = new StringBuilder(); foreach (var property in peroperties) { if (withName) sb.Append($"{property.Name}:"); sb.Append($"{property.GetValue(t)},"); } return sb.ToString(); } public static List GetData(DbContext db, Expression> select, Expression> where, Expression> order) where T : class { var list = db.Set() .Where(@where) .OrderBy(order) .Select(@select).ToList(); return list; } public static List GetData(DbContext db, Expression> select, Expression> where, Expression> order, out int count) where T : class { count = db.Set().Where(@where).Count(); var list = db.Set() .Where(@where) .OrderBy(order) .Select(@select).ToList(); return list; } public static List GetPagedDataAsc(DbContext db, Expression> select, Expression> where, Expression> order, int pageIndex, int pageSize, out int total) where T : class { total = db.Set().Where(@where).Count(); var list = db.Set() .Where(@where) .OrderBy(order) .Select(@select) .Skip((pageIndex - 1) * pageSize) .Take(pageSize).ToList(); return list; } public static List GetPagedDataAsc(DbContext db, Expression> select, Expression> where, Expression> order, int pageIndex, int pageSize, out int total) where T : class { total = db.Set().Where(@where.Compile()).AsQueryable().Count(); var list = db.Set() .Where(@where.Compile()).AsQueryable() .OrderBy(order) .Select(@select) .Skip((pageIndex - 1) * pageSize) .Take(pageSize).ToList(); return list; } public static List GetPagedDataAsc(List sourceList, Expression> select, Expression> where, Expression> order, int pageIndex, int pageSize, out int total) where T : class { List list = null; total = 0; try { total = sourceList.Where(where.Compile()).AsQueryable().Count(); } catch (Exception e) { Console.WriteLine(e); } try { list = sourceList.Where(@where.Compile()).AsQueryable() .OrderBy(order) .Select(@select) .Skip((pageIndex - 1) * pageSize) .Take(pageSize).ToList(); } catch (Exception e) { Console.WriteLine(e); } return list; } public static List GetPagedDataDesc(DbContext db, Expression> select, Expression> where, Expression> order, int pageIndex, int pageSize, out int total) where T : class { total = db.Set().Where(@where).Count(); var list = db.Set() .Where(@where) .OrderByDescending(order) .Select(@select) .Skip((pageIndex - 1) * pageSize) .Take(pageSize).ToList(); return list; } public static List GetPagedDataDesc(DbContext db, Expression> select, Expression> where, Expression> order, int pageIndex, int pageSize, out int total) where T : class { total = db.Set().Where(@where).Count(); var list = db.Set() .Where(@where) .OrderByDescending(order) .Select(@select) .Skip((pageIndex - 1) * pageSize) .Take(pageSize).ToList(); return list; } public static List GetPagedDataDesc(List sourceList, Expression> select, Expression> where, Expression> order, int pageIndex, int pageSize, out int total) where T : class { total = sourceList.Where(@where.Compile()).AsQueryable().Count(); var list = sourceList .Where(@where.Compile()).AsQueryable() .OrderByDescending(order) .Select(@select) .Skip((pageIndex - 1) * pageSize) .Take(pageSize).ToList(); return list; } } }