C#_Lamada帮助类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks; namespace EasyFrame.Common
{
public static class LambdaCommon
{
#region 表达式工具
/// <summary>
/// 相当于&&操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisFilter">已生成的过滤条件</param>
/// <param name="otherFilter">未生成的过滤条件</param>
/// <returns>新的过滤</returns>
public static Expression GotoAndAlso(this Expression thisFilter, Expression otherFilter)
{
return Expression.AndAlso(thisFilter, otherFilter);
}
/// <summary>
/// 相当于||操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisFilter">已生成的过滤条件</param>
/// <param name="otherFilter">未生成的过滤条件</param>
/// <returns>新的过滤</returns>
public static Expression GotoOrElse(this Expression thisFilter, Expression otherFilter)
{
return Expression.OrElse(thisFilter, otherFilter);
}
/// <summary>
/// 相当于==操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoEqual(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
return Expression.Equal(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue));
}
/// <summary>
/// 相当于>=操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoGreaterThanOrEqual<T>(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//大于或等于
return Expression.GreaterThanOrEqual(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue, typeof(T)));
}
/// <summary>
/// 相当于小于等于操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoLessThanOrEqual<T>(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//小于或等于
return Expression.LessThanOrEqual(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue, typeof(T)));
}
/// <summary>
/// 相当于!=操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoNotEqual(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
return Expression.NotEqual(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue));
} /// <summary>
/// 相当于>=操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoGreaterThanOrEqual(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//大于或等于
return Expression.GreaterThanOrEqual(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue));
}
/// <summary>
/// 相当于>操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoGreaterThan<T>(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//大于
return Expression.GreaterThan(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue, typeof(T)));
}
/// <summary>
/// 相当于小于操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoLessThan<T>(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//小于
return Expression.LessThan(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue, typeof(T)));
}
/// <summary>
/// 相当于>=操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoGreaterThanOrEqualByDateTime(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//大于或等于
return Expression.GreaterThanOrEqual(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue, typeof(DateTime?)));
}
/// <summary>
/// 字符串包含
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoContains(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
return Expression.Call(Expression.Property(thisParameterExpression, propertieName), typeof(string).GetMethod("Contains"), Expression.Constant(propertieValue));
} /// <summary>
/// 相当于小于或等于操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoLessThanOrEqualByDateTime(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//小于或等于
return Expression.LessThanOrEqual(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue, typeof(DateTime?)));
}
/// <summary>
/// 相当于>操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoGreaterThanByDateTime(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//大于
return Expression.GreaterThan(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue, typeof(DateTime?)));
}
/// <summary>
/// 相当于小于操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoLessThanByDateTime(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//小于
return Expression.LessThan(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue, typeof(DateTime?)));
}
/// <summary>
/// 包含操作 相当余 a=> arr.Contains(a.ID)
/// </summary>
/// <param name="thisParameterExpression"></param>
/// <param name="propertieName"></param>
/// <param name="propertieValue"></param>
/// <returns></returns>
public static Expression ContainsOperations(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
MethodInfo method = null;
MemberExpression member = Expression.Property(thisParameterExpression, propertieName);
var containsMethods = typeof(Enumerable).GetMethods(BindingFlags.Static | BindingFlags.Public).Where(m => m.Name == "Contains");
foreach (var m in containsMethods)
{
if (m.GetParameters().Count() == )
{
method = m;
break;
}
}
method = method.MakeGenericMethod(member.Type);
var exprContains = Expression.Call(method, new Expression[] { Expression.Constant(propertieValue), member });
return exprContains;
} /// <summary>
/// 包含操作 相当于 a=>a.ID.Contains(key)
/// </summary>
/// <param name="thisParameterExpression"></param>
/// <param name="propertieName"></param>
/// <param name="propertieValue"></param>
/// <returns></returns>
public static Expression Contains(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
var propertyExp = Expression.Property(thisParameterExpression, propertieName);
MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) });
var someValue = Expression.Constant(propertieValue, typeof(string));
var containsMethodExp = Expression.Call(propertyExp, method, someValue);
return containsMethodExp;
}
#endregion
}
}
C#_Lamada帮助类的更多相关文章
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- C++ 可配置的类工厂
项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core
背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
.NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- PHP-解析验证码类--学习笔记
1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1 定义变量 //随机因子 private $char ...
- C# 多种方式发送邮件(附帮助类)
因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...
随机推荐
- hive的join
第一:在map端产生join mapJoin的主要意思就是,当链接的两个表是一个比较小的表和一个特别大的表的时候,我们把比较小的table直接放到内存中去,然后再对比较大的表格进行m ...
- python语法_列表生成器_生成器_迭代器_异常捕获
列表生成式 a = [x for x in range(10)] print(a) x 可进行操作 a = [x*2 for x in range(10)] print(a) x甚至可以为函数, de ...
- 牛人的blog,关于推荐,topic model的
http://blog.csdn.net/zhoubl668?viewmode=list
- 面试作业之浅析京东促销活动核心模型 - DDD
前言 京东作为中国最大的自营式B2C电商平台,提供一站式综合性购物,服务亿万家庭,涵盖3C.家电.消费品.服饰.家居家装.生鲜和新通路(B2B),满足了消费者的多元化需求.每天都会发布相关的促销活动, ...
- WARN [wxpay java sdk] - report fail. reason: report.mch.weixin.qq.com:80 failed to respond
最近小程序接口 tomcat日志经常出现此类警告 WARN [wxpay java sdk] - report fail. reason: report.mch.weixin.qq.com:80 fa ...
- 1.5 A better alternative thing: React Native
In 2015, React Native (RN) was born. At that time, few people paid attention to it because it was st ...
- new Date()设置日期在IOS的兼容问题
一般这样创建一个日期变量 var d = new Date("2017-08-11 12:00:00"); 发现在iOS中不兼容,返回valid Date. IOS中不支持 - 连 ...
- 微信小程序setData()方法的详解以及对数组/json操作
此篇文章是本人对setData方法的一些理解,是查阅文档和查找一些其他资料综述的,有所不足希望指正! 直接进入正题! 一.setData()方法: 1.参数接受一个对象,以key,value的形式表示 ...
- 你必须知道的10个Python第三库
1. BeautifulSoup Beautiful Soup是一个可以从HTML,XML进行提取文件的Python库,日常我们使用爬虫进行数据抓取回来之后,往往需要进行数据解析. 使用它能让你开心愉 ...
- 大量示例彻底搞懂Linux查找,which,whereis,locate,find
前言 Linux常用命令中,有些命令可以帮助我们查找二进制文件,帮助手册或源文件的位置,也有的命令可以帮助我们查找磁盘上的任意文件,今天我们就来看看这些命令如何使用. which which命令会在P ...