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: 定义因特网服务的类型,常见的为 ...
随机推荐
- CF1213G Path Queries
题目链接 问题分析 直接按边从小到大加入,求所有的连通点对数量即可.最后离线询问.使用并查集维护Size. 参考程序 #include <bits/stdc++.h> using name ...
- [CSP-S模拟测试]:分组配对(倍增+二分)
题目传送门(内部题108) 输入格式 输入文件第一行为两个正整数$n,M$. 接下来两行,第一行为$n$个正整数$a_1\sim a_n$,其中$a_i$表示编号为$i$的男生的实力值:第二行为$n$ ...
- 一、mybatis的插件介绍
摘自:https://www.cnblogs.com/qm-article/p/11785350.html mybatis的插件机制 一.mybatis的插件介绍 关于mybatis的插件,我想大 ...
- 使用JS生成HTML标签,以达到母板页的效果
前台页面 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1. ...
- 复制表结构和数据SQL语句(转)
http://www.cnblogs.com/zhengxu/articles/2206894.html 1.复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表 ...
- jquery绝对路径
<strong>1.修改为绝对路径</strong> $(document).ready(function(){ $.get("${pageContext.reque ...
- SQL查询的嵌套
SQL查询过程中,可以将查询嵌套为表,嵌套时需要给每个派生出来的表一个自己的别名. 如图:
- React之父子组件之间传值
1.新增知识点 /** React中的组件: 解决html 标签构建应用的不足. 使用组件的好处:把公共的功能单独抽离成一个文件作为一个组件,哪里里使用哪里引入. 父子组件:组件的相互调用中,我们把调 ...
- iOS 图表工具charts之PieChartView
关于charts的系列视图介绍传送门: iOS 图表工具charts介绍 iOS 图表工具charts之LineChartView iOS 图表工具charts之BarChartView iOS 图表 ...
- JavaScript日常学习4
JavaScript事件 1.<button id="btn1" onclick="document.getElementById("btn1" ...