linq 实现查询字符串拼接 : And 和 OR 两种方式

N年前我们是这样来 拼接查询字符串的:

     public string Test(string a, string b, string c,string d)
        {
            string sql = "SELECT * FROM Users WHERE 1=1";
            if (!string.IsNullOrEmpty(a))
            {
                sql += " AND name=‘" + a + "‘";
            }
            if (!string.IsNullOrEmpty(b))
            {
                sql += " AND age=‘" + b+ "‘";
            }
            if (!string.IsNullOrEmpty(c))
            {
                sql += " AND sex=‘" + c + "‘";
            }
            if (!string.IsNullOrEmpty(d))
            {
                sql += " AND address=‘" + d + "‘";
            }
            return sql.ToString();
        }

现在我们使用linq来实现上边的代码:

 public void Test(string a, string b, string c,string d)
        {
            QueryContext query = new QueryContext();
            var q = from u in query.Users
                     select u;
            if (!string.IsNullOrEmpty(a))
            {
                q = q.Where(p => p.name == a);
            }
            if (!string.IsNullOrEmpty(b))
            {
                q = q.Where(p => p.age == b);
            }
            if (!string.IsNullOrEmpty(c))
            {
                q = q.Where(p => p.sex == c);
            }
            if (!string.IsNullOrEmpty(d))
            {
                q = q.Where(p => p.address == d);
            }
            q.ToList();  //上边的所有if,只有到此处才会执行
        }

ps: 如果查询字符串内 不是AND,而是OR 的话

如:

     public string Test(string a, string b, string c,string d)
        {
            string sql = "SELECT * FROM Users WHERE 1=1";
            if (!string.IsNullOrEmpty(a))
            {
                sql += " OR name=‘" + a + "‘";
            }
            if (!string.IsNullOrEmpty(b))
            {
                sql += " OR age=‘" + b+ "‘";
            }
            if (!string.IsNullOrEmpty(c))
            {
                sql += " OR sex=‘" + c + "‘";
            }
            if (!string.IsNullOrEmpty(d))
            {
                sql += " OR address=‘" + d + "‘";
            }
            return sql.ToString();
        }

此种情况,通过linq可以这样实现:

    public void Test(string a,string b,string c,string d)
        {
                 QueryContext query = new QueryContext();
                 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();
        }
时间: 2024-12-30 22:37:21

linq 实现查询字符串拼接 : And 和 OR 两种方式的相关文章

oracle查询前N条数据的两种方式

在实际用途中,常常会要求取表中前几条纪录,就有以下两种方式来获取数据: 先排序后查询: SELECT * FROM (SELECT * FROM 表 m ORDER BY create_time DESC) WHERE ROWNUM <= 10 , 先查询后排序: SELECT *  FROM 表 m  WHERE ROWNUM <= 10 ORDER BY create_time DESC; 原文地址:https://www.cnblogs.com/zoushiyu/p/9746550.ht

查询字符串中字母的个数(两种实现方式1,list与set集合 2,map集合)

题目: 取出一个字符串中字母出现的次数.如:字符串:"abcde%^kka27qoq" ,输出格式为:a(2)b(1)k(2)... 第一种方式(set和list结合使用): package itheima; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; /** * .取出一个字符串中字母出现的次数.如:字符串:"

字符串转换成金额的两种方式

'获取暂支金额费用        Dim TemporaryAmount        TemporaryAmount = Browser("SAP").Page("SAP").Frame("表单").WebEdit("暂支金额").GetROProperty("value")        MsgBox CCur(TemporaryAmount)        '去除金额中间的,号        Dim

MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码

先来张在路上-- 此项目是用Maven创建的,没有使用Maven的,自己百度.谷歌去:直接用Junit测试就行,先执行里面的save方法,添加10000条测试数据提供各种聚合查询等. 废话不多说,上干货-- 一.MongoDB数据库的配置(mongodb.xml) 以下是我自己的配置,红色字体请改为自己本机的东东,你说不懂设置端口,不会创建数据库名称,不会配置用户名密码,那有请查阅本系列的第4节(MongoDB的使用学习之(四)权限设置--用户名.密码.端口==),你说懒得设置,那就@#¥%--

求字符串长度 strlen(数组指针两种方式)

问题: 求字符串中所含有字符的个数(包括空格),即求字符串长度: #include <stdio.h> #include <assert.h> int _strlen(const char* str) { assert(str != NULL); int i=0; for(;*str++!='\0';i++); //for(;str++!=NULL;i++);//有些说这句也可以,但执行结果是死循环,str++即使越界也未必为NULL; return i; } int _strle

JAVA中创建字符串的两种方式的区别

我们知道,通常在Java中创建一个字符串会有两种方式,通过双引号直接赋值和通过构造器来创建. String x = "abcd"; String y = new String("abcd"); 然而,这两种方式之间的区别是什么?分别应用于哪些情况,之前还不是很懂. 1.双引号的方式 String x = "abcd"; String y = "abcd"; System.out.println(x==y);//true Sys

OC--定义字符串的两种方式

1.常量区 存放一些常量字符串2.堆 对象3.栈 存放局部变量 掌握:1.定义字符串的两种方式 1>利用数组 char name[] = "itcast"; 特点:字符串里面的字符是可以修改的 2>利用指针 char *name = "itcast"; 特点:字符串其实是一个常量字符串,里面的字符是不能修改的

Hibernate 带参数查询的两种方式

1.使用?通配符 public User validate(String userName, String password) { String hql = "from User u where u.userName = ? and u.password = ?"; User user = null; List<User> list = ht.find(hql, new Object[]{userName, password}); if (list.size()!=0){

定义字符串的两种方式

定义字符串的两种方式 数组定义 char name[] = "answer" 指针定义 char *name = "answer" 比较 字符串里的字符可以修改,而字符串是一个常量,字符串里面的字符不能修改. >Tips:可以与我的另外一篇文章一起看.http://blog.csdn.net/u011192270/article/details/46475981 版权声明:本文为博主原创文章,未经博主允许不得转载.