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 ...
随机推荐
- sql server自定义函数学习笔记
sql server中函数分别有:表值函数.标量函数.聚合函数.系统函数.这些函数中除系统函数外其他函数都需要用户进行自定义. 一.表值函数 简单表值函数 创建 create function fu_ ...
- HTML 5 <input> list 属性
定义和用法 list 属性引用数据列表,其中包含输入字段的预定义选项. 可以用来做关联搜素
- 软件发布时的 GA、RC、Beta
今天在使用 ovirt 的时候,遇到了其 Pre-release 版本并看到如下版本号:ovirt-node-ng-image-update-4.2.7-0.1.rc1.el7.noarch.rpm ...
- Requests 校花网图片爬取
纪念我们闹过的矛盾,只想平淡如水 import requestsimport reurl = 'http://www.xiaohuar.com/list-1-%s.html'for i in rang ...
- momentjs 学习
momentjs 是一个JavaScript日期处理类库,官网地址:http://momentjs.com/ 字符串 + 格式 moment(String, String); moment(Strin ...
- 微信小程序搭建和开发相关指引
几点: 1.环境搭建 2.开发和调试 3.发布 原文链接: http://www.lookdaima.com/WebForms/WebPages/Blanks/Pm/Docs/DocItemDetai ...
- 11LaTeX学习系列之---LaTeX的特殊字符
目录 目录 前言 (一)源代码 (二)输出效果 目录 本系列是有关LaTeX的学习系列,共计19篇,本章节是第11篇. 前一篇:10LaTeX学习系列之---Latex的文档结构 后一篇:12LaTe ...
- Sqoop-1.4.7-部署与常见案例
该文章是基于 Hadoop2.7.6_01_部署 . Hive-1.2.1_01_安装部署 进行的 1. 前言 在一个完整的大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核 ...
- 控件布局_TableLayout
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android=" ...
- SHELL-收集Oracle已应用的PSU信息
1. 命令收集版本信息 # 创建数据收集脚本文件 OPER_FILE=${EXECUTE_ID}_oper.sh if [[ "${OPER_USER}" = "${US ...