easyui datagrid remoteSort的实现 Controllers编写动态的Lambda表达式 IQueryable OrderBy扩展
- EF 结合easy-ui datagrid 实现页面端排序
- EF动态编写排序Lambda表达式
1、前端页面
var mainListHeight = $(window).height() - 20;
$(document).ready(function () {
$("#AppLogGrid").datagrid({
"title": "应用程序日志记录",
"iconCls": "icon-blank",
"width": "100%",
"height": mainListHeight,
"nowrap": false,
"striped": true,
"pagination": true,
"rownumbers": true,
"remoteSort": true,
"pageList": [50, 100, 200, 500, 1000],
"frozenColumns": [[
{ "field": "ck", checkbox: true }
]],
"toolbar": "#tb",
"columns": [[
{ "field": "nId", "title": "序号", "width": 60, "align": "right", "sortable": true },
{ "field": "dtDate", "title": "日志记录时间", "width": 120, "align": "center", "sortable": true },
{ "field": "sLevel", "title": "日志等级", "width": 80, "align": "center", "sortable": true },
{ "field": "sLogger", "title": "Logger类", "width": 80, "align": "left" },
{ "field": "sMessage", "title": "日志内容", "width": 660, "align": "left" }
]]
})
//初始化
loadGrid();
});
//刷新表格
function loadGrid() {
var p = {
"url": "/CommonBiz/GetAppLogList",
"data": {
"Parameter": {
"LogLevel": $("#logLevel").val()
}
}
}
$("#AppLogGrid").datagrid({ "url": p.url, "queryParams": { "Parameter": $.toJSON(p.data)} });
}
设置了“dtDate”和“sLevel” 两个字段允许( "remoteSort": true)在页面排序。
2、后端Controller代码
/// <summary>
/// 获取某类型日志记录
/// </summary>
/// <returns></returns>
public JsonResult GetAppLogList()
{
using (Reserve_DbEntities db = new Reserve_DbEntities())
{
var list = new List<AppSystemLog>();
string queryParams = Request.Form["Parameter"];
int pageRowNum = int.Parse(Request.Form["rows"]);
int pageIndex = int.Parse(Request.Form["page"]);
string sortField = Request.Form["sort"] as string;
string order = Request.Form["order"] as string;
if (!string.IsNullOrEmpty(queryParams))
{
var resultJson = JObject.Parse(queryParams);
string level = resultJson["Parameter"]["LogLevel"].Value<string>();
if (string.IsNullOrEmpty(sortField))
{
if (level.Equals("ALL"))
list = db.AppSystemLog.OrderByDescending(l => l.nId).ToList();
else list = db.AppSystemLog.Where(l => l.sLevel == level).OrderByDescending(o => o.dtDate).ToList();
}
else
{
if (level.Equals("ALL"))
list = db.AppSystemLog.OrderBy<AppSystemLog>(sortField, order.Equals("asc") ? true : false).ToList();
else list = db.AppSystemLog.Where(l => l.sLevel == level).OrderBy<AppSystemLog>(sortField, order.Equals("asc") ? true : false).ToList();
}
}
var resultRows = list.Skip((pageIndex - 1) * pageRowNum).Take(pageRowNum).ToList();
var jsonResult = new { total = list.Count, rows = resultRows };
return Json(jsonResult, JsonRequestBehavior.AllowGet);
}
}
这里的技巧是需要扩展IQueryable,因为一般写法是 list.OrderBy(o=>o.XXXX字段“显示的写法”)。而页面post过来的字段名称是会变的,这样后端必须实现动态编写Lambda表达式,一翻搜索发现扩展的方法:
/// <summary>
/// IQueryable扩展
/// </summary>
public static class QueryableExter
{
public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string propertyName, bool ascending) where T : class
{
Type type = typeof(T);
PropertyInfo property = type.GetProperty(propertyName);
if (property == null)
throw new ArgumentException("propertyName", "Not Exist");
ParameterExpression param = Expression.Parameter(type, "p");
Expression propertyAccessExpression = Expression.MakeMemberAccess(param, property);
LambdaExpression orderByExpression = Expression.Lambda(propertyAccessExpression, param);
string methodName = ascending ? "OrderBy" : "OrderByDescending";
MethodCallExpression resultExp = Expression.Call(typeof(Queryable), methodName, new Type[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExpression)); return source.Provider.CreateQuery<T>(resultExp);
}
}
3、截图show

easyui datagrid remoteSort的实现 Controllers编写动态的Lambda表达式 IQueryable OrderBy扩展的更多相关文章
- 动态组合lambda 表达式
//记录实体集合—动态组合lambda 表达式 Expression<Func<AdEntity, bool>> thirdWhere = p => p.Observer ...
- 【转】EntityFramework动态组合Lambda表达式作为数据筛选条件,代替拼接SQL语句
传统的操作数据库方式,筛选数据需要用StringBuilder拼接一大堆的WHERE子句. 在Entity Framework中,代码稍有不慎就会造成巨大性能消耗,如: using(var db=ne ...
- 动态创建Lambda表达式实现高级查询
需求简介 最近这几天做的东西总算是回归咱的老本行了,给投资管理项目做一个台账的东西,就是类似我们的报表.其 中有一个功能是一个高级查询的需求,在查询条件方面大概有7.8个查询条件.需求就是如果一个条件 ...
- 动态创建 Lambda 表达式
首先我们看一个简单 Lambda 表达式的构成. i => i > 5 在这个表达式中,"i" 被称为 Parameter,"i > 5" 是 ...
- 动态拼接lambda表达式树
前言 最近在优化同事写的代码(我们的框架用的是dapperLambda),其中有一个这样很普通的场景——界面上提供了一些查询条件框供用户来进行过滤数据.由于dapperLambda按条件查询时是传入表 ...
- [2014-12-30]如何动态构造Lambda表达式(动态构造Lambda查询条件表达式)
声明 本文对Lambda表达式的扩展,示例代码来源于网络. 场景描述 web开发查询功能的时候,如果查询条件比较多,就会遇到动态组合查询条件的情况.在手写sql的情况下,我们一般会根据传入的参数,针对 ...
- 动态构建Lambda表达式实现EF动态查询
在使用Entity Framework做数据查询的时候,查询条件往往不是固定的,需要动态查询.可以通过动态构建Lamda表达式来实现动态查询. Lamda表达式 使用Lamda表达式可以很方便的按条件 ...
- Entity Framework 动态构造Lambda表达式Expression<Func<T, bool>>
using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...
- C#动态创建lambda表达式
/// <summary> /// 创建lambda表达式:p=>true /// </summary> /// <typeparam name="T&q ...
随机推荐
- [20171227]表的FULL_HASH_VALUE值的计算.txt
[20171227]表的FULL_HASH_VALUE值的计算.txt --//sql_id的计算是使用MD5算法进行哈希,生成一个128位的Hash Value,其中低32位作为HASH VALUE ...
- Sql_server基本操作
使用Sql_server创建表,视图,触发器,存储过程,函数等基本操作. create table test1( /* 创建一个表 */ num int ) alter table test1 /* ...
- Node.js中文乱码解决方法
- fedora 使用 vnc 远程 fedora 28 主机
问题重述: 最近环境中需要使用 fedora 28 来进行远程桌面,于是就重新配置了一下vnc 在这里面做一下记录. 过程: yum 安装: 工作机上安装 vncviewer 远程主机上安装: vnc ...
- yolo.h5制作方法
学习吴恩达的深度学习第三课缺少yolo.h5文件,花了很长时间来解决这个问题. 看到CSDN上各种需要积分下载的yolo.h5文件,实在看不下去了. 从 https://github.com/alla ...
- mysql5.7如何修改密码以及密码如何忘记无密码登陆
今天买了一台阿里云服务器,Centos7.3系统,环境是LAMP.学生价9.8元是真的很实惠了.然后想修改一下mysql服务器的密码(mysql版本5.7),结果操作失误,密码给忘记了,导致新旧密码都 ...
- ccf-20161203--权限查询
这题我的思路是将用户直接与他的权限联系起来.比如: 用户 角色 权限 Alice hr crm:2直接转变为:Alice: crm:2 题目与代码如下: 问题描述 试题编号: 201612-3 试题名 ...
- 关于使用jquery修改hover伪标签的样式
HTML如下: <div class=".nav-subitem"> <div classs="nav-subitem-link">标题 ...
- 转://三分钟读懂Oracle数据库容灾架之DataGuard
目前市场上针对Oracle数据库常见的容灾产品大致可以分为两大类. Oracle 公司自己的容灾产品 非Oracle公司的容灾产品 Oracle公司目前的容灾产品有我们常见的DataGuard和属于中 ...
- Scala 上下文界定
上下文界定的类型参数形式为T:M的形式,其中M是一个泛型,这种形式要求存在一个M[T]类型的隐式值: /** * 上下文界定 */ @Test def testOrdering_Class_Conte ...