文章介绍全网最佳方式使用EF+Linq实现多条件组合查询;代码中没有使用到网上主流自定义Expression表达式而是采用linq原生态功能编写示例直观、易懂,且有效解决自定义Expression不支持EF问题。

一、EF+Linq代码片段示例如下(注意只是片段,如果对EF熟悉可轻松理解,model变量为数据模型,MainContext 继承DbContext) :

说明:用IQueryable<tbDevice> table可以初始化null,也可以用var table=XXXX方式,具体视代码结构

IQueryable<tbDevice> table = null;
using (MainContext db = new MainContext())
{
//默认查询所有
table = from t in db.Device
select t;

//下面是多条件组合查询
if (model.Id > 0)
{

table = from t in table
where t.id == model.Id
select t;
}
if (model.GroupId > 0)
{
table = from t in table
where t.groupId == model.GroupId
select t;
}

if (!string.IsNullOrEmpty(model.Name))
{
table = from t in table
where t.name.Contains(model.Name)
select t;
}
if (!string.IsNullOrEmpty(model.SerialNo))
{
table = from t in table
where t.serialNo.Contains(model.SerialNo)
select t;
}

//排序

table = from t in table
orderby t.id descending
select t;

//此处才开始执行查询数据库并返回列表

result.data = table.ToList();
}

string _UserID = string.Empty;
_UserID = "E351D301-F64B-412C-B9EF-573F41235AF2";

string _UserName = string.Empty;
_UserName = "admin";

string _employyName = string.Empty;
_employyName = "测试1";

using (var xj = new XJGasBottles_testDataContext())
{
//Linq写法
var usersLinq = from us in xj.Users
where (string.IsNullOrEmpty(_UserID) || us.UserID.ToString() == _UserID)
&& (string.IsNullOrEmpty(_UserName) || us.UserName == _UserName)
|| (us.EmpName == _employyName)
//where string.IsNullOrEmpty(_UserID) || us.UserID.ToString()==_UserID
//where string.IsNullOrEmpty(_UserName) || us.UserName==_UserName
select us;
foreach (var item in usersLinq)
{
Console.WriteLine("Linq:");
Console.WriteLine(item.UserID + "_" + item.UserName);

}

//Lamda写法
var usersLamda = xj.Users.Where(s => (string.IsNullOrEmpty(_UserID) || s.UserID.ToString() == _UserID) &&
(string.IsNullOrEmpty(_UserName) || s.UserName == _UserName) ||
(s.EmpName==_employyName)
)
.Select(s => s);

foreach (var item in usersLamda)
{
Console.WriteLine("Lamda:");
Console.WriteLine(item.UserID + "_" + item.UserName);

}

}

.netLinq动态Where条件的更多相关文章

  1. EntityFramework动态多条件查询与Lambda表达式树

              在常规的信息系统中, 我们有需要动态多条件查询的情况, 例如UI上有多个选择项可供用户选择多条件查询数据. 那么在.net平台Entity Framework下, 我们用Lambd ...

  2. ibatis动态查询条件

    ibatis的调试相对困难,出错的时候主要依据是log4生成的log文件和出错提示,这方面要能比较熟练的看懂. 下面这个配置基本上包含了最复杂的功能:分页\搜索\排序\缓存\传值Hash表\返回has ...

  3. Silverlight学习(四) domainservice动态多条件查询

    上次讲了silverlight+MVVN+EF的简单框架,能够实现简单的数据CURD,但是多条件动态的查询一直没有实现.在网上查阅了很多资料,发现自己走了很多误区,代码很难调试正确. 这次的查询是基于 ...

  4. Mysql动态多条件查询

    动态多条件查询是一类经常遇到的问题. 在Mysql里面可以用语句简单的解决. SELECT * FROM product WHERE price = IF('{0}' = '', price, '{0 ...

  5. 浅析Entity Framework Core2.0的日志记录与动态查询条件

    前言 Entity Framework Core 2.0更新也已经有一段时间了,园子里也有不少的文章.. 本文主要是浅析一下Entity Framework Core2.0的日志记录与动态查询条件 去 ...

  6. 在SharePoint列表中使用动态筛选条件[今日][Today]

    如果在SharePoint使用了日历控件或者其他列表中有时间字段,用户经常希望能够动态使用条件字段进行筛选,例如希望筛选出开始日期是今天的事件.未来三日的事件. SharePoint的列表筛选条件支持 ...

  7. mybatis动态拼接条件的技巧 where 1=1 或者where标签

    /**     * 根据输入的学生信息进行条件检索     * 1. 当只输入用户名时, 使用用户名进行模糊检索:     * 2. 当只输入邮箱时, 使用性别进行完全匹配     * 3. 当用户名 ...

  8. ibatis动态多条件查询及模糊查询(oracle,mysql,sql)

    首先是模糊查询的问题,开始时我使用如下条件:select * from user where name like '%#value#%'. 可是怎么也不行,好像还报错了.后来在网上找到了解决方法,就是 ...

  9. oracle 条件:1=1或1=0,动态添加条件

    看到where语句中有条件:where 1=1    和    1=2或1<>1 用途:     1=1:是为了添加条件时使用and并列其他条件时使用的(动态连接后续条件)     比如: ...

随机推荐

  1. php上传导入文件 nginx-502错误

    4. php程序执行时间过长而超时,检查nginx和fastcgi中各种timeout设置.(nginx 中的  fastcgi_connect_timeout 300;fastcgi_send_ti ...

  2. 获取 TUniConnection.SpecificOptions默认值和下拉框列表值

    TUniConnection的SpecificOptions参数决定了数据库连接配置参数,但可惜的是,SpecificOptions设计器界面,Devart公司只能让它在设计期配置! Specific ...

  3. 什么是词性标注(POS tagging)

    词性标注也叫词类标注,POS tagging是part-of-speech tagging的缩写. 维基百科对POS Tagging的定义: In corpus linguistics, part-o ...

  4. CentOS 7.4 初次手记:第四章 CentOS安全了解

    第四章 CentOS安全了解... 66 第一节 user.group.chmod. 66 I 10位文件属性... 66 II user/group增删改... 67 III user/group配 ...

  5. java1.8新特性(四 创建 stream对象)

    java1.8 提供了 stream对象 可以用作 对 集合 数组的 一系列操作,都是基于lambda 表达式 ,所以得先熟悉lambda 表达式 集合创建stream对象 // 1.集合创建stre ...

  6. hive命令的3种调用方式

    方式1:hive –f  /root/shell/hive-script.sql(适合多语句) hive-script.sql类似于script一样,直接写查询命令就行 例如: [root@cloud ...

  7. Springboot监控之一:SpringBoot四大神器之Actuator之2--覆盖修改spring cloud的默认的consul健康检查规则

    微服务网关是socket长连接与支付公司对接,该网关需要提供http接口给内部系统调用,当socket没有建立连接时(网关服务的高可用是haProxy搭建的,有些服务的socket可能未连上支付公司) ...

  8. 保持url唯一性 解决多个网站首页问题

    原文地址:http://www.seowhy.com/bbs/thread-2694339-1-1.html 在网站SEO优化过程中,经常会遇到这样或者那样的常见技术型问题,达闻现将此类常见技术问题总 ...

  9. MySQL数据库事务各隔离级别加锁情况--read committed && MVCC(转载)

    http://www.imooc.com/article/17290 http://www.51testing.com/html/38/n-3720638.html https://dev.mysql ...

  10. Tom与Jerry谁先死?

    有如下问题:Tom的攻击力为113,血量为688,Jerry的攻击力为112,血量为691.每一个回合他们各攻击对方一次,请问谁先死? 这是一个简单的“人狗大战问题”,我们只要利用类的继承,在原有的基 ...