You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
5.5 KiB
162 lines
5.5 KiB
4 years ago
|
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 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<T> GetData<T, TKey>(DbContext db, Expression<Func<T, T>> select,
|
||
|
Expression<Func<T, bool>> where, Expression<Func<T, TKey>> order)
|
||
|
where T : class
|
||
|
{
|
||
|
var list = db.Set<T>()
|
||
|
.Where(@where)
|
||
|
.OrderBy(order)
|
||
|
.Select(@select).ToList();
|
||
|
return list;
|
||
|
}
|
||
|
|
||
|
|
||
|
public static List<dynamic> GetData<T, TKey>(DbContext db, Expression<Func<T, dynamic>> select,
|
||
|
Expression<Func<T, bool>> where, Expression<Func<T, TKey>> order, out int count)
|
||
|
where T : class
|
||
|
{
|
||
|
count = db.Set<T>().Where(@where).Count();
|
||
|
var list = db.Set<T>()
|
||
|
.Where(@where)
|
||
|
.OrderBy(order)
|
||
|
.Select(@select).ToList();
|
||
|
return list;
|
||
|
|
||
|
}
|
||
|
|
||
|
public static List<dynamic> GetPagedDataAsc<T, TKey>(DbContext db, Expression<Func<T, dynamic>> select,
|
||
|
Expression<Func<T, bool>> where, Expression<Func<T, TKey>> order, int pageIndex, int pageSize, out int total)
|
||
|
where T : class
|
||
|
{
|
||
|
total = db.Set<T>().Where(@where).Count();
|
||
|
var list = db.Set<T>()
|
||
|
.Where(@where)
|
||
|
.OrderBy(order)
|
||
|
.Select(@select)
|
||
|
.Skip((pageIndex - 1) * pageSize)
|
||
|
.Take(pageSize).ToList();
|
||
|
return list;
|
||
|
|
||
|
}
|
||
|
|
||
|
public static List<T> GetPagedDataAsc<T, TKey>(DbContext db, Expression<Func<T, T>> select,
|
||
|
Expression<Func<T, bool>> where, Expression<Func<T, TKey>> order, int pageIndex, int pageSize, out int total)
|
||
|
where T : class
|
||
|
{
|
||
|
total = db.Set<T>().Where(@where.Compile()).AsQueryable().Count();
|
||
|
var list = db.Set<T>()
|
||
|
.Where(@where.Compile()).AsQueryable()
|
||
|
.OrderBy(order)
|
||
|
.Select(@select)
|
||
|
.Skip((pageIndex - 1) * pageSize)
|
||
|
.Take(pageSize).ToList();
|
||
|
return list;
|
||
|
|
||
|
}
|
||
|
|
||
|
public static List<T> GetPagedDataAsc<T, TKey>(List<T> sourceList, Expression<Func<T, T>> select,
|
||
|
Expression<Func<T, bool>> where, Expression<Func<T, TKey>> order, int pageIndex, int pageSize, out int total)
|
||
|
where T : class
|
||
|
{
|
||
|
List<T> 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<dynamic> GetPagedDataDesc<T, TKey>(DbContext db, Expression<Func<T, dynamic>> select,
|
||
|
Expression<Func<T, bool>> where, Expression<Func<T, TKey>> order, int pageIndex, int pageSize, out int total)
|
||
|
where T : class
|
||
|
{
|
||
|
total = db.Set<T>().Where(@where).Count();
|
||
|
var list = db.Set<T>()
|
||
|
.Where(@where)
|
||
|
.OrderByDescending(order)
|
||
|
.Select(@select)
|
||
|
.Skip((pageIndex - 1) * pageSize)
|
||
|
.Take(pageSize).ToList();
|
||
|
return list;
|
||
|
}
|
||
|
|
||
|
public static List<T> GetPagedDataDesc<T, TKey>(DbContext db, Expression<Func<T, T>> select,
|
||
|
Expression<Func<T, bool>> where, Expression<Func<T, TKey>> order, int pageIndex, int pageSize, out int total)
|
||
|
where T : class
|
||
|
{
|
||
|
total = db.Set<T>().Where(@where).Count();
|
||
|
var list = db.Set<T>()
|
||
|
.Where(@where)
|
||
|
.OrderByDescending(order)
|
||
|
.Select(@select)
|
||
|
.Skip((pageIndex - 1) * pageSize)
|
||
|
.Take(pageSize).ToList();
|
||
|
return list;
|
||
|
}
|
||
|
|
||
|
public static List<T> GetPagedDataDesc<T, TKey>(List<T> sourceList, Expression<Func<T, T>> select,
|
||
|
Expression<Func<T, bool>> where, Expression<Func<T, TKey>> 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;
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|