广告
返回顶部
首页 > 资讯 > 精选 >Linq中怎么实现动态条件查询
  • 560
分享到

Linq中怎么实现动态条件查询

2023-06-17 21:06:33 560人浏览 薄情痞子
摘要

本篇文章给大家分享的是有关Linq中怎么实现动态条件查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在开发项目的过程中,我们经常会遇到这样的需求,动态组合条件的查询。比如淘宝

本篇文章给大家分享的是有关Linq中怎么实现动态条件查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

开发项目的过程中,我们经常会遇到这样的需求,动态组合条件的查询。比如淘宝中的高级搜索:

Linq中怎么实现动态条件查询
实例讲解Linq动态条件查询

要实现这个功能,通常的做法是拼接sql查询字符串,不管是放在程序中或是在存储过程中。现在出现了Linq,下面来看看Linq动态条件查询是怎样实现的。

还是以Northwind数据库为例,如果要查询所有CustomerID以A或者B字母开头的Customer,一般我们会这样写:

var results = ctx.Customers.Where(c => c.CustomerID.StartsWith("A") || c.CustomerID.StartsWith("B"));

如果需求改变,还要查询出以X字母或者Y字母开头的Customer,那可以增加查询条件:

var results = ctx.Customers.Where(c => c.CustomerID.StartsWith("A") || c.CustomerID.StartsWith("B")      || c.CustomerID.StartsWith("X") || c.CustomerID.StartsWith("Y"));

不过如果该需求不确定呢?我们不知道具体是哪些字母,可能传过来的是一个字符串数组

string[] starts = ....  var results = ctx.Customers.Where(c => ?);

我们可能很自然的这样写,虽然很清楚要做什么,但是很可惜编译不通过,编译器并不允许我们像这样来组合条件。

Expression<FUNC<CUSTOMER,< SPAN>bool>> condition = cus => true;  foreach (string s in starts)  {      condition = cus => cus.CustomerID.StartsWith(s) || condition(cus);  }

在Linq动态条件中提供一些方法允许我们动态构造Lambda表达式。如Expression.Call, Expression.Or, Expression.And,这样代码就可以写成:

ParameterExpression c = Expression.Parameter(typeof(Customer), "c");   Expression condition = Expression.Constant(false);   foreach (string s in starts)   {       Expression con = Expression.Call(           Expression.Property(c, typeof(Customer).GetProperty("CustomerID")),           typeof(string).GetMethod("StartsWith", new Type[] { typeof(string) }),           Expression.Constant(s));       condition = Expression.Or(con, condition);   }   Expression<FUNC<CUSTOMER, < SPAN>bool>> end =       Expression.Lambda<FUNC<CUSTOMER, < SPAN>bool>>(condition, new ParameterExpression[] { c });

现在来解释Linq动态条件这段代码,首先构造了一个ParameterExpression对象,它作为参数传到Lambda表达中(相当于c => c.CustomerID.StartsWith("A")这里的c)。然后用值为false的Expression用来初始化该表达式(Expression.Constant(false))。

Expression con = Expression.Call(       Expression.Property(c, typeof(Customer).GetProperty("CustomerID")),       typeof(string).GetMethod("StartsWith", new Type[] { typeof(string) }),       Expression.Constant(s));   condition = Expression.Or(con, condition);

上面这段代码是重头戏,用Expression.Call方法动态构造一个表达式,其中Expression.Property(c, typeof(Customer).GetProperty("CustomerID"))转换为c.CustomerID,typeof(string).GetMethod("StartsWith", new Type[] { typeof(string) })表示string的StartsWith(string)方法,Expression.Constant(s)表示字符串常量,这个方法可以表示成:c.CustomerID.StartsWith(s)。然后调用Expression.Or方法组合各个条件(根据逻辑关系不同调用不同的方法,如or,and...)。

最后构造成Lambda表达式,现在就可以使用它了 ctx.Customers.Where(end)。

以上就是Linq中怎么实现动态条件查询,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: Linq中怎么实现动态条件查询

本文链接: https://www.lsjlt.com/news/293558.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linq中怎么实现动态条件查询
    本篇文章给大家分享的是有关Linq中怎么实现动态条件查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在开发项目的过程中,我们经常会遇到这样的需求,动态组合条件的查询。比如淘宝...
    99+
    2023-06-17
  • Linq中怎么实现多条件查询
    这篇文章将为大家详细讲解有关Linq中怎么实现多条件查询,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Linq多条件查询(高级搜索),假如一共可以输入5个条件,但是用户根据需要可能只输2个或...
    99+
    2023-06-17
  • LINQ中怎么实现动态查询
    今天就跟大家聊聊有关LINQ中怎么实现动态查询,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。LINQ动态查询实现实例:case 'L': &nbs...
    99+
    2023-06-17
  • linq动态条件查询如何使用
    本篇内容主要讲解“linq动态条件查询如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linq动态条件查询如何使用”吧!1,linq动态条件之构造表达式树private Expr...
    99+
    2023-06-17
  • linq多条件查询怎么使用
    本篇内容介绍了“linq多条件查询怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!linq多条件查询,当条件为NUll时不做查询,只有...
    99+
    2023-06-17
  • LINQ动态查询怎么理解
    本篇内容主要讲解“LINQ动态查询怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“LINQ动态查询怎么理解”吧!LINQ动态查询有这样一个场景:应用程序可能会提供一个用户界面,用户可以使用...
    99+
    2023-06-17
  • LINQ+Ajax动态查询怎么使用
    本篇内容主要讲解“LINQ+Ajax动态查询怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“LINQ+Ajax动态查询怎么使用”吧!思路:前台发出请求 写明 调用的 modleName 和...
    99+
    2023-06-17
  • 怎么使用JPA+querydsl实现多条件动态查询
    这篇文章将为大家详细讲解有关怎么使用JPA+querydsl实现多条件动态查询,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JPA querydsl多条件动态查询相信很多人在做订单管理的时候会用到多条件的...
    99+
    2023-06-29
  • MybatisPlus实现多条件拼接动态查询
    1、前 言 最近在开发过程中,需要用 MybatisPlus 实现类似以下形式的 SQL 语句,动态拼接多个条件,进行查询。 select *from user_infowhere is_deleted = 0...
    99+
    2023-08-20
    mysql mybatis-plus spring boot
  • 动态linq查询的实现方式是什么
    这篇文章主要介绍“动态linq查询的实现方式是什么”,在日常操作中,相信很多人在动态linq查询的实现方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”动态linq查询...
    99+
    2022-10-19
  • Linq中怎么实现连接查询
    今天就跟大家聊聊有关Linq中怎么实现连接查询,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Linq连接查询之前先建立两个查询:using (DataClassesData...
    99+
    2023-06-17
  • linq中怎么实现多表查询
    这篇文章给大家介绍linq中怎么实现多表查询,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1:1关系的多表操作表结构如上首先是测试取全记录的情况(也就是取所有字段)linq多表查询之直接写表达式var use...
    99+
    2023-06-17
  • LINQ中怎么实现嵌套查询
    这篇文章将为大家详细讲解有关LINQ中怎么实现嵌套查询,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。LINQ嵌套查询应用实例:如果我们需要取出市场部的所有员工,在以往的O/R Mapping...
    99+
    2023-06-17
  • redis怎么实现条件查询?
    redis怎么实现条件查询?这个问题可能是我们日常工作经常见到的。通过这个问题,希望你能收获更多。今天跟随小编一起来看解决方案吧。一、导入jar包二、实现简单的条件查询创建一个User实体类public c...
    99+
    2022-10-18
  • dedecms怎么实现条件查询
    dedecms可以使用SQL查询语句来实现条件查询,操作步骤为:1、打开DedeCMS管理后台;2、导航到“数据库管理”页面;3、根据需求,编写相应的查询语句;4、点击执行按钮或相应的提交按钮来执行查询;5、查看符合查询条件的记录即可。本教...
    99+
    2023-08-03
  • SQL中怎么实现多条件查询
    SQL中怎么实现多条件查询,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。第一种写法是if (@addDate is&n...
    99+
    2022-10-18
  • Mybatis 实现动态组装查询条件,仿SQL模式
    目的: 以前比较习惯使用Hibernate,后来觉得mybatis不能按我想要的自动组装为SQL查询条件,所以提供该工具类; 效果图: 如图所示,根据条件自动组装查询条件,下面来...
    99+
    2022-11-12
  • 使用JPA+querydsl如何实现多条件动态查询
    目录JPAquerydsl多条件动态查询介绍一下querydsl看源码springdataJPA和querydsl什么是SpringDataJPA?什么是QueryDSL?@Mapp...
    99+
    2022-11-13
  • layui多条件查询怎么实现
    在Layui中实现多条件查询可以通过以下步骤实现:1. 在HTML页面中创建一个表单,包含多个输入框或下拉框,用于用户输入查询条件。...
    99+
    2023-09-22
    layui
  • linq中怎么实现动态排序
    本篇文章为大家展示了linq中怎么实现动态排序,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。想实现linq动态排序就是linq的order by 后跟动态的函数可以用委托实现,但是发现实现委托函数时...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作