• 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扩展的更多相关文章

  1. 动态组合lambda 表达式

    //记录实体集合—动态组合lambda 表达式 Expression<Func<AdEntity, bool>> thirdWhere = p => p.Observer ...

  2. 【转】EntityFramework动态组合Lambda表达式作为数据筛选条件,代替拼接SQL语句

    传统的操作数据库方式,筛选数据需要用StringBuilder拼接一大堆的WHERE子句. 在Entity Framework中,代码稍有不慎就会造成巨大性能消耗,如: using(var db=ne ...

  3. 动态创建Lambda表达式实现高级查询

    需求简介 最近这几天做的东西总算是回归咱的老本行了,给投资管理项目做一个台账的东西,就是类似我们的报表.其 中有一个功能是一个高级查询的需求,在查询条件方面大概有7.8个查询条件.需求就是如果一个条件 ...

  4. 动态创建 Lambda 表达式

    首先我们看一个简单 Lambda 表达式的构成. i => i > 5 在这个表达式中,"i" 被称为 Parameter,"i > 5" 是 ...

  5. 动态拼接lambda表达式树

    前言 最近在优化同事写的代码(我们的框架用的是dapperLambda),其中有一个这样很普通的场景——界面上提供了一些查询条件框供用户来进行过滤数据.由于dapperLambda按条件查询时是传入表 ...

  6. [2014-12-30]如何动态构造Lambda表达式(动态构造Lambda查询条件表达式)

    声明 本文对Lambda表达式的扩展,示例代码来源于网络. 场景描述 web开发查询功能的时候,如果查询条件比较多,就会遇到动态组合查询条件的情况.在手写sql的情况下,我们一般会根据传入的参数,针对 ...

  7. 动态构建Lambda表达式实现EF动态查询

    在使用Entity Framework做数据查询的时候,查询条件往往不是固定的,需要动态查询.可以通过动态构建Lamda表达式来实现动态查询. Lamda表达式 使用Lamda表达式可以很方便的按条件 ...

  8. Entity Framework 动态构造Lambda表达式Expression<Func<T, bool>>

    using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...

  9. C#动态创建lambda表达式

    /// <summary> /// 创建lambda表达式:p=>true /// </summary> /// <typeparam name="T&q ...

随机推荐

  1. Python鸢尾花分类实现

    #coding:utf-8 from sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_s ...

  2. WCF服务端开发和客户端引用小结

    1.服务端开发 1.1 WCF服务创建方式 创建一个WCF服务,总是会创建一个服务接口和一个服务接口实现.通常根据服务宿主的不同,有两种创建方式. (1)创建WCF应用程序 通过创建WCF服务应用程序 ...

  3. 万能Makefile,前戏做足项目做起来才顺畅。

    # 获取要编译的源码 SRC :=$(wildcard *.cpp) OBJ :=$(patsubst %.cpp,%.o,$(SRC)) # 编译参数 CC :=g++ STD :=-std=c++ ...

  4. 启动OpenVPN失败

    启动OpenVPN失败 文:铁乐与猫 [root@yunwei_OpenVPN openvpn]# systemctl status openvpn ● openvpn.service - LSB: ...

  5. lvm管理卷之缩减卷大小

    最近刚刚装好了一个系统,但是因为没有分好区,导致home分区过大,所以想把home分区的一大半移动到根分区里面. 1.先说一下我的环境. 安装的是centos6版本的系统,使用的默认文件系统是ext4 ...

  6. 【Linux】磁盘的分区与命名规则

    1,Startx:切换到图形界面 2,Pwd:查看当前目录 3,Whoami:查看当前用户 4,Cd:   1. 命令格式: cd [目录名]       2. 命令功能: 切换当前目录至dirNam ...

  7. tkinter学习系列之(六)Radiobutton控件

    目录 目录 前言 (一)基本属性 (二)在Frame里布局: 目录 前言 Radiobutton单选框,在一组选框中,只能选中一个. (一)基本属性 (1)特有属性: value 按钮的值 varia ...

  8. hadoop系列 第二坑: hive hbase关联表问题

    关键词: hive创建表卡住了 创建hive和hbase关联表卡住了 其实针对这一问题在info级别的日志下是看出哪里有问题的(为什么只能在debug下才能看见呢,不太理解开发者的想法). 以调试模式 ...

  9. arcgis api for javascript中使用proxy.jsp

    当我们使用arcgis api for javascript 查询arcgis服务时,如果查询的参数很长时,通过get方式提交会查询不到结果,因为get方式提交的参数有长度限制,需要通过代理的方式使用 ...

  10. oracle中nvarchar2字符集不匹配

    oracle当多表union时遇到nvarchar2类型时报错 字符集不匹配对使用nvarchar的地方,加上 to_char( nvarchar 的变量或字段 ) 如:select to_char( ...