ExpressionTree学习笔记
概述:
这段时间需要制定自定义查询条件,感觉有必要学习ExpressionTree。
学习参考资料:https://msdn.microsoft.com/en-us/library/mt654263.aspx;https://www.codeproject.com/tips/438804/expression-tree
例子模型:
public class People
{
public string Name { get; set; }
public string Email { get; set; }
public int CityID { get; set; }
}
List<People> people = new List<People>
{
new People(){ Name = "Pranay",Email="pranay@test.com",CityID= },
new People(){ Name = "Heamng",Email="Hemang@test.com",CityID= },
new People(){ Name = "Hiral" ,Email="Hiral@test.com",CityID=},
new People(){ Name = "Maitri",Email="Maitri@test.com",CityID= }
};
完成目标:
在List<People>中根据Name排序
实施过程:
问题:
1、如何将已经生成的Expression与分页机制联起来?设想是:将查询条件变成Json格式,在页面端显示string,保存到分页的data属性中,再从后台分解出Json。
目前已成功。
后端生成Json字符串:
ViewBag.searchCondition = JsonConvert.SerializeObject(searchCondition);
前端使用Json字符串:
@{
string jsonSearchCondition = String.Empty;
if (ViewBag.searchCondition != null)
{
jsonSearchCondition = ViewBag.searchCondition;
}
}
@Ajax.ActionLink(i.ToString(), "Action", "Controller", new { pageIndex = i, pageNumber = ViewBag.pageNumber, jsonSearchCondition = jsonSearchCondition }, new AjaxOptions { UpdateTargetId = "show-list", HttpMethod = "Get", InsertionMode = InsertionMode.Replace })
后端解析Json字符串
SearchDeviceCondition searchCondition = JsonConvert.DeserializeObject<SearchDeviceCondition>(jsonSearchCondition);
2、And与AndAlso的区别
AndAlso对应"&&"
3、Expression.Equals()相等操作,类型不匹配的问题
var exMaintainInfoID = Expression.Property(Expression.Property(param, "MaintainInfo"), "MaintainInfoID");
var searchMaintainInfoID =Expression.Convert(Expression.Constant(searchCondition.MaintainInfoID), exMaintainInfoID.Type);
var equalMaintainInfoID = Expression.Equal(exMaintainInfoID, searchMaintainInfoID);
searchCondition.MaintainInfoID中的类型为int?型,而param=>param.MaintainInfoID类型为int型,直接用Expression.Equals()会提示数据不匹配,无法操作的错误。
解决办法是利用Expression.Convert()将int?型转换成int类型。
4、Enum操作方法
4.1需要用到EnumType本身
Expression searchMaintainResult = Expression.Constant( searchCondition.MaintainResult, typeof(MaintainResultEnum));
Expression exMaintainResult = Expression.Property(param, "MaintainResult");
Expression equalMaintainResult = Expression.Equal(exMaintainResult, searchMaintainResult);
利用Expression.Constant(, Type)中的第二个参数Type,将该值设为EnumType.
4.2需要用到EnumType中的值
var maintainLevel = (int)searchCondition.RadioMaintainLevel;
Expression searchMaintainLevel = Expression.Constant(maintainLevel);
exMaintainLevel = Expression.Property(exMaintainLevel, "MaintainLevelClass");
Expression equalMaintainLevel = Expression.Equal(exMaintainLevel, searchMaintainLevel);
比如EnumType中的项设为int=1,需要用到“1”的值,先转换成int型。
ExpressionTree学习笔记的更多相关文章
- Learning hard 学习笔记
第一章 你真的了解C#吗 1.什么是C#, 微软公司,面向对象,运行于.NET Framework之上, 2.C#能编写哪些应用程序, Windows应用桌面程序,Web应用程序,Web服务, 3.什 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
随机推荐
- python虚环境
有的项目使用tornado框架比较好,有的用Django框架比较好,容易发生冲突,这个时候可以建立一个虚拟的python环境. 安装virtualenv包 进入项目所在目录,执行命令 virtuale ...
- js判断某个字符串是否包含另一个字符串
1.indexOf():推荐,可返回某个指定的字符串值在字符串中首次出现的位置.如果要检索的字符串值没有出现,则该方法返回 -1. var str = "123" console. ...
- python3笔记十三:python数据类型-Set集合
一:学习内容 集合概念 集合创建 集合添加 集合插入 集合删除 集合访问 集合操作:并集.交集 二:集合概念 1.set:类似dict,是一组key的集合,不存储value 2.本质:无序和无重复元素 ...
- Vue可自定义tab组件
在工作中我们常常要用到tab组件,如果有用第三方组件库的话一般都会有这个组件,但如果没有使用第三方组件库,或者想要自定义tab,那么或许这个无依赖的tab组件将会极大地节约你的开发时间. 如何 ...
- Viola-Jones(人脸检测)
Viola-Jones 人脸检测 1.Haar特征抽取 ‘ 2. Adaboost 算法
- Vimdiff 使用
what is vimdiff 在类nuix平台,我们希望对文件之间的差异之间快速定位,希望能够很容易的进行文件合并……. 可以使用Vim提供的diff模式,通常称作vimdiff,就是这样一个能满足 ...
- fstab中使用设备的uuid
设备定位的方法有: 设备名称, 如:/dev/sda1, 随着linux内核加载模块顺序在每次启动的时候可能会不同, 在插拔U盘/移动硬盘的时候, 设备分配到的名称可能不同,这样fs映射就会失败 因此 ...
- 本地git 添加多个远程仓库
1.在本地找到,~/.ssh 文件夹 2.执行 ssh-keygen -t rsa -C "Winseek" -f "id-rsa-github" 3.生成了i ...
- Spring Cloud负载均衡:使用zuul作服务器端负载均衡
1.目的: 本文简述Spring Cloud负载均衡之服务器负载均衡模式,使用组件为zuul. zuul作为Spring Cloud中的网关组件,负责路由转发.身份验证.请求过滤等等功能,那么我们可以 ...
- ping命令介绍
1.ping是TCP/IP协议的一部分,所以只要安装了TCP/IP协议就(无论windows或linux)都可以使用ping命令. 2.ping命令的原理:本机创建一个数据包发送给(ping对象)目标 ...