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: 定义因特网服务的类型,常见的为 ...
随机推荐
- Oracle用函数或PIVOT实现行转列
原数据: 目标数据: 实现代码: SELECT YEAR AS "年", SUM (DECODE (QUATER, 1, RATE, 0)) AS "季度一", ...
- wkhtmltopdfhtml php生成pdf快照,网页截图,网页快照完整版 (原)
首先,安装(linux安装为例) 1.下载wkhtmltopdf wget http://download.gna.org/wkhtmltopdf/obsolete/linux/wkhtmltopdf ...
- JS框架_(Typed.js)彩色霓虹灯发光文字动画
百度云盘 传送门 密码:8oei 发光文字动画效果: <!doctype html> <html> <head> <meta charset="ut ...
- 解决eclipse无法部署工程到tomcat运行的问题
当在tomcat想加入工程时在列表没发现要的项目时, 引起这个错误提示的原因是:项目里的.project文件和.settings文件的缺失或者错误.而不能适用于现在的tomcat. 解决办法如下: 右 ...
- vue项目内嵌入到app input type=file 坑(文件上传插件)
w问题描述: 我用vue-cli完成的一个移动端项目,内嵌到app当中,用原生的input type=file 来完成文件上传.在安卓下没有问题但是在苹果手机 上传第二次手机就会发生白屏 并无缘无故跳 ...
- C博客作业05--指针 批改总结
1.0如题 1.1 一.评分规则 1.伪代码务必是文字+代码描述,直接反应代码,每题扣1分 2.提交列表没内容,或者太简单,每题得分0分.注意选择提交列表长的题目介绍. 3.代码格式不规范,包括命名随 ...
- LeetCode 337. 打家劫舍 III(House Robber III)
题目描述 小偷又发现一个新的可行窃的地点. 这个地区只有一个入口,称为“根”. 除了根部之外,每栋房子有且只有一个父房子. 一番侦察之后,聪明的小偷意识到“这个地方的所有房屋形成了一棵二叉树”. 如果 ...
- 只运行一个loop脚本
#!/bin/bash dir=$(dirname $(readlink -f "$0")) full=$(readlink -f "$0") name=$(b ...
- ad2014注册出现:注册 - 激活错误 (0015.111)
将安装包内的(adlmact.dll & adlmact_libFNP.dll)这两个文件取出并覆盖即可.安装包内文件具体位置:在安装包内搜索“adlmact”出现的两个文件“adlmact_ ...
- retrofit2+rxjava+okhttp网络请求实现
第一步:添加依赖: compile 'io.reactivex:rxandroid:1.2.0' compile 'com.squareup.retrofit2:adapter-rxjava:2.1. ...