17,740
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// Get List By PageParameter
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
public IEnumerable<academicnews> GetList(AcademicnewsParameter parameter)
{
var db = new TestdbEntities();
var list = db.academicnews.AsQueryable();
if (string.IsNullOrEmpty(parameter.OrderBy))
{
parameter.OrderBy = "nid";
parameter.IsAsc = false;
}
#region 查询参数
if (!string.IsNullOrEmpty(parameter.classcode))
{
list = list.Where(x => x.classcode.Equals(parameter.classcode));
}
if (parameter.type > 0)
{
list = list.Where(x => x.type == parameter.type);
}
if (parameter.sort > 0)
{
list = list.Where(x => x.sort == parameter.sort);
}
if (parameter.isvisible)
{
list = list.Where(x => x.isvisible == true);
}
else
{
list = list.Where(x => x.isvisible != true);
}
if (parameter.isdelete)
{
list = list.Where(x => x.isdelete == true);
}
else
{
list = list.Where(x => x.isdelete == false || x.isdelete == null);
}
if (!string.IsNullOrEmpty(parameter.title))
{
list = list.Where(x => x.title.Contains(parameter.title));
}
#endregion 查询参数
return list.AsQueryable().GetPageList(parameter);
}
分页方法如下:
public static class ExtendEntity
{
/// <summary>
/// 获取结果集总数,支持多字段排序,多个字段间用英文半角逗号分隔
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <param name="query">结果集</param>
/// <param name="parameters">页面参数</param>
/// <returns></returns>
public static IEnumerable<T> GetPageList<T>(this IQueryable<T> query, PageParameter parameters)
{
parameters.RecordCount = query.Count();
if (!String.IsNullOrEmpty(parameters.OrderBy))
{
//query = query.DataSorting(parameters.OrderBy, parameters.IsAsc, true);
//支持多字段排序
string[] orderBys = parameters.OrderBy.Split(',');
for (int i = 0; i < orderBys.Length; i++)
{
string orderBy = orderBys[i];
bool isAsc = orderBy.StartsWith("-") ? false : (orderBy.StartsWith("+") ? true : parameters.IsAsc);
orderBy = orderBy.TrimStart('-').TrimStart('+');
query = query.DataSorting(orderBy, isAsc, i == 0 ? true : false);
}
}
if (parameters.PageSize < 1)
return query;
if (parameters.PageIndex > 1)
query = query.Skip((parameters.PageIndex - 1) * parameters.PageSize).Take(parameters.PageSize);
return query.Take(parameters.PageSize).ToList();
}
/// <summary>
/// 对数据结果集排序
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <param name="source">结果集</param>
/// <param name="orderBy">排序字段名称</param>
/// <param name="IsASC">排序规则</param>
/// <param name="isFirst"></param>
/// <returns></returns>
public static IQueryable<T> DataSorting<T>(this IQueryable<T> source, string orderBy, bool IsASC, bool isFirst)
{
var sortingDir = (isFirst ? "Order" : "Then") + (IsASC ? "By" : "ByDescending");
ParameterExpression param = Expression.Parameter(typeof(T), orderBy);
PropertyInfo pi = typeof(T).GetProperty(orderBy);
Type[] types = new Type[2];
types[0] = typeof(T);
types[1] = pi.PropertyType;
var lambda = Expression.Lambda(Expression.Property(param, orderBy), param);
Expression expr = Expression.Call(typeof(Queryable), sortingDir, types, source.AsQueryable().Expression, lambda);
IQueryable<T> query = source.AsQueryable().Provider.CreateQuery<T>(expr);
return query;
}
}
实体模型继承的分页参数类型如下:
/// <summary>
/// page parameter base class
/// </summary>
public class PageParameter
{
public int PageSize { get; set; }
public int PageIndex { get; set; }
public int RecordCount { get; set; }
public string OrderBy { get; set; }
public bool IsAsc { get; set; }
public int PageCount
{
get
{
return RecordCount % PageSize > 0 ? (RecordCount / PageSize + 1) : RecordCount / PageSize;
}
}
}
protected void InitializeRepository()
{
((IObjectContextAdapter)this).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
((IObjectContextAdapter)this).ObjectContext.ContextOptions.ProxyCreationEnabled = false;
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 300;
this.Configuration.ValidateOnSaveEnabled = true;
this.Configuration.AutoDetectChangesEnabled = true;
this.Configuration.LazyLoadingEnabled = false;
}