最近项目经常涉及LINQ的AND和OR操作,顺便收集了一下资料

AND操作:

var query=....;
if (!string.IsNullOrEmpty(a))  {  query = query.Where(p => p.name == a);  }

OR操作:

第一种:

public static class PredicateBuilder{/// <summary>/// 构造函数使用True时:单个AND有效,多个AND有效;单个OR无效,多个OR无效;混合时写在AND后的OR有效/// 构造函数使用False时:单个AND无效,多个AND无效;单个OR有效,多个OR有效;混合时写在OR后面的AND有效/// </summary>public static Expression<Func<T, bool>> True<T>() { return f => true; }public static Expression<Func<T, bool>> False<T>() { return f => false; }public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,Expression<Func<T, bool>> expr2){var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());return Expression.Lambda<Func<T, bool>>(Expression.Or(expr1.Body, invokedExpr), expr1.Parameters);}public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1,Expression<Func<T, bool>> expr2){var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());return Expression.Lambda<Func<T, bool>>(Expression.And(expr1.Body, invokedExpr), expr1.Parameters);}public static Predicate<T> ConvertToPredicate<T>(this Func<T, bool> func){return new Predicate<T>(func);}}

使用方法:

sql语句的想要实现的内容如下,重点关注where后面的条件部分:
select ... from ... where (Test.id = 3 and Test.name = "N3") or (Test.id = 4 and Test.name = "N4")
linq方式的动态实现如下:
var predicate = PredicateBuilder.False<Test>();
foreach (var keyword in searchKeywords)
{int nTemp = keyword.id;string sTemp = keyword.name;predicate = predicate.Or(p => p.id == nTemp && p.name == sTemp);
}IEnumerable<Test> results = lst.Where(predicate.Compile());

第二种:

var q1 = from u in query.Users  where u.name== a && a != ""  || u.age == b && b != ""  || u.sex == c && c != ""  || u.address ==d && d !=""   select u;  q1.ToList();

第三种:

var query=...;
var basequery=...;foreach(var seq in condictions)
{
query=query.union(basequery.where(a=>a.name.contains("xxx"));
}

注明一下出处:

http://www.cnblogs.com/jack98/p/3237565.html

http://blog.sina.com.cn/s/blog_93ac501e010144se.html

http://www.silverlightchina.net/html/tips/2011/0814/9741.html

转载于:https://www.cnblogs.com/phoenixgold/p/3516735.html

LINQ字符拼接的AND和OR操作相关推荐

  1. java list 拼接 字符串数组_把数组所有元素排序,并按照“参数=参数值”的模式用“”字符拼接成字符串...

    /** * 把数组所有元素排序,并按照"参数=参数值"的模式用"&"字符拼接成字符串 * @param params 需要排序并参与字符拼接的参数组 * ...

  2. python字符串与文本处理技巧(3):字符剔除、字符对齐、字符拼接、字符插入变量

    1. 删除字符串中不需要的字符 去掉文本字符串开头,结尾或者中间不想要的字符,比如空白. strip() & Istrip() & rstrip() strip() 方法能用于删除开始 ...

  3. Python(IT峰)笔记05-数据类型详解:字符串、转义字符,字符串操作,字符串格式化,英文字符,字符串查找,字符串操作

    1.字符串的定义 单引号 双引号 三引号 字符串定义时,引号可以相互嵌套 2.转义字符 斜杠\转义符,续行符.转义符可转义,在末尾可续行 strs='hello'\'wolrd' print(strs ...

  4. java 字符拼接_java字符串拼接的几种方式

    1. plus方式 当左右两个量其中有一个为String类型时,用plus方式可将两个量转成字符串并拼接. String a=""; int b=0xb; String c=a+b ...

  5. Linq to SQL 的增删改查操作

    Linq,全称Language Integrated Query,作为C#3.0新语法,是C#语言的一个扩展,可以将数据查询直接集成到编程语言本身中. Linq表达式和SQL语句差不多,说白了就是颠倒 ...

  6. 字符设备驱动基础篇4——字符设备驱动读写接口的操作实践

    以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 参考资料:http://www.cnblogs.com/biaohc/p/6575074.html. 一.细节 1.自动分配主设备号 注册函 ...

  7. java 字符查找 截断_java字符串常用操作(查找、截取、分割)

    public class 字符串常用操作 { public static void main(String[] args) { /* * 查找子串 */ String str1="dwqae ...

  8. 用PredicateBuilder实现Linq动态拼接查询

    在使用Linq查询的时候,特别是如果你在使用Entiry Framwork,有时会遇到动态查询的情况(客户的查询条件是不固定的拼接查询). 我们能想到的第一方案应该是拼接SQL,的确这样是可以达到我们 ...

  9. 运用wps在excel一串数字中提取中间某几位字符拼接编辑

    注意:字符就是指类字型符号或单位,包含字母.数字.运算符号.标点符号和其他符号,以及一些功能性符号,字符是计算机或电子通信中字母.数字.符号的统称,是数据结构中数据存取中最小的数据单位,通常有8个二进 ...

最新文章

  1. rsync文件同步的两种方式——ssh协议和守护进程(端口873)
  2. Source引擎的远程代码执行漏洞,可能影响千万游戏玩家
  3. hadoop 1.0.1集群安装及配置
  4. 我常用的10个Python实用小Trick
  5. 重新安装mysql5.7.21_linux 安装mysql 5.7.21详解以及安装过程中所遇问题解决
  6. github设置仓库可见性 私人仓库设置他人协作/可见
  7. Zend 创始人提议创建 PHP 方言,暂命名为 P++
  8. bzoj 3110: [Zjoi2013]K大数查询(树套树)
  9. SparkRDD内核
  10. 9ztu.com 就找图商品图片商品条码搜索引擎
  11. office2016 Excel每次打开都需要配置的问题解决
  12. 免费网站(视频,PPT,静态图片,动态图片,壁纸)
  13. SaaS到底是什么?如何做?
  14. 2018-2-13-win10-uwp-切换主题
  15. html字体怎么变大变粗,ppt如何加粗字体更粗 幻灯片的艺术字怎么把字体变粗?...
  16. 【已解决】群晖套件中心无法添加第三方源
  17. 【蛮力算法】数据结构与算法
  18. 微信小程序调出多窗口
  19. 如何获取适用于 Azure 的 EV 代码签名证书?
  20. 红安一中2021高考成绩查询系统,2021年中国高考拉开大幕

热门文章

  1. java 中普通类继承,抽象类继承,接口类继承,子类一定要重写父类中的方法吗
  2. 大数据入门基础教程系列
  3. 基于本地部署的hyperledger fabric升级chaincode
  4. case when else 默认随机_SQL高级知识——CASE的用法
  5. qt之键盘的设计及QlineEdit内容读取
  6. hust1343(贪吃蛇模拟)
  7. Codeforces 997D Cycles in Product (点分治、DP计数)
  8. BZOJ 3622 Luogu P4859 已经没有什么好害怕的了 (容斥原理、DP)
  9. linux 文件io实例代码,linux 文件IO(示例代码)
  10. confluence 5 mysql_Centos 6.5 安装 Atlassiana Crowd+JIRA+Confluence(Wiki)之一 数据库篇(MySQL5.1)...