返回顶部
首页 > 资讯 > 精选 >LINQ动态查询的方法有哪些
  • 942
分享到

LINQ动态查询的方法有哪些

2023-06-17 21:06:29 942人浏览 泡泡鱼
摘要

本篇内容介绍了“LINQ动态查询的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在LINQ动态查询中,Lambda表达式是许多标准

本篇内容介绍了“LINQ动态查询的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在LINQ动态查询中,Lambda表达式是许多标准查询运算符的基础,编译器创建lambda表达式以捕获基础查询方法(例如 Where、Select、Order By、Take While 以及其他方法)中定义的计算。表达式目录树用于针对数据源的结构化查询,这些数据源实现IQueryable

例如,LINQ to sql 提供程序实现 IQueryable接口,用于查询关系数据存储。C#和Visual Basic编译器会针对此类数据源的查询编译为代码,该代码在运行时将生成一个表达式目录树。然后,查询提供程序可以遍历表达式目录树数据结构,并将其转换为适合于数据源的查询语言。

表达式目录树在LINQ中用于表示分配给类型为Expression的变量的Lambda表达式。还可用于创建LINQ动态查询。

System.Linq.Expressions命名空间提供用于手动生成表达式目录树的api。Expression类包含创建特定类型的表达式目录树节点的静态工厂方法,例如,ParameterExpression(表示一个已命名的参数表达式)或 MethodCallExpression(表示一个方法调用)。编译器生成的表达式目录树的根始终在类型Expression的节点中,其中TDelegate是包含至多五个输入参数的任何TDelegate委托;也就是说,其根节点是表示一个lambda表达式。

下面几个例子描述如何使用表达式目录树来创建LINQ动态查询。

LINQ动态查询之Select下面例子说明如何使用表达式树依据 IQueryable 数据源构造一个动态查询,查询出每个顾客的ContactName,并用GetCommand方法获取其生成SQL语句。

//依据IQueryable数据源构造一个查询  IQueryable custs = db.Customers;  //组建一个表达式树来创建一个参数  ParameterExpression param =     Expression.Parameter(typeof(Customer), "c");  //组建表达式树:  c.ContactNameExpression selector = Expression.Property(param,    typeof(Customer).GetProperty("ContactName"));Expression pred = Expression.Lambda(selector, param);  //组建表达式树:  Select(c=>c.ContactName)Expression expr = Expression.Call(typeof(Queryable), "Select",    new Type[] { typeof(Customer), typeof(string) },    Expression.Constant(custs), pred);  //使用表达式树来生成动态查询  IQueryable<string> query = db.Customers.AsQueryable()    .Provider.CreateQuery<string>(expr);  //使用GetCommand方法获取SQL语句  System.Data.Common.DbCommand cmd = db.GetCommand(query);Console.WriteLine(cmd.CommandText);

生成的SQL语句为:

SELECT [t0].[ContactName] FROM [dbo].[Customers] AS [t0]

LINQ动态查询之Where下面一个例子是“搭建”Where用法来动态查询城市在伦敦的顾客。

IQueryable custs = db.Customers;  //创建一个参数  cParameterExpression param =     Expression.Parameter(typeof(Customer), "c");  c.City=="London"Expression left = Expression.Property(param,    typeof(Customer).GetProperty("City"));Expression right = Expression.Constant("London");Expression filter = Expression.Equal(left, right);Expression pred = Expression.Lambda(filter, param);  Where(c=>c.City=="London")Expression expr = Expression.Call(typeof(Queryable), "Where",    new Type[] { typeof(Customer) },     Expression.Constant(custs), pred);  //生成动态查询IQueryable query = db.Customers.AsQueryable()    .Provider.CreateQuery(expr);

生成的SQL语句为:

SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName],   [t0].[ContactTitle], [t0].[Address], [t0].[City], [t0].[Region],   [t0].[PostalCode], [t0].[Country], [t0].[Phone],   [t0].[Fax]FROM [dbo].[Customers] AS [t0] WHERE [t0].[City] = @p0-- @p0: Input NVarChar (Size = 6; Prec = 0; Scale = 0) [London]

LINQ动态查询之OrderBy本例既实现排序功能又实现了过滤功能。

IQueryable custs = db.Customers;    //创建一个参数cParameterExpression param =     Expression.Parameter(typeof(Customer), "c");    c.City=="London"Expression left = Expression.Property(param,      typeof(Customer).GetProperty("City"));Expression right =   Expression.Constant("London");    Expression filter = Expression.Equal(left, right);Expression pred =   Expression.Lambda(filter, param);    Where(c=>c.City=="London")MethodCallExpression whereCallExpression =   Expression.Call(    typeof(Queryable), "Where",      new Type[] { typeof(Customer) },    Expression.Constant(custs), pred);    OrderBy(ContactName =>   ContactName)MethodCallExpression orderByCallExpression =   Expression.Call(    typeof(Queryable), "OrderBy",      new Type[] { typeof(Customer), typeof(string) },       whereCallExpression,      Expression.Lambda(Expression.Property    (param, "ContactName"), param));    //生成动态查询    IQueryable query =  db.Customers.AsQueryable().Provider.CreateQuery(orderByCallExpression);

生成的SQL语句为:

SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName],   [t0].[ContactTitle], [t0].[Address], [t0].[City], [t0].[Region],[t0].[PostalCode],   [t0].[Country], [t0].[Phone],   [t0].[Fax]FROM [dbo].[Customers] AS [t0] WHERE [t0].[City] = @p0ORDER BY [t0].[ContactName]-- @p0: Input NVarChar (Size = 6; Prec = 0; Scale = 0) [London]

LINQ动态查询之UNIOn下面的例子使用表达式树动态查询顾客和雇员同在的城市。

//e.CityIQueryable custs = db.Customers;          ParameterExpression param1 = Expression.Parameter(typeof(Customer), "e");  Expression left1 = Expression.Property(param1,typeof(Customer).GetProperty("City"));Expression pred1 = Expression.Lambda(left1, param1);  c.CityIQueryable employees = db.Employees;ParameterExpression param2 = Expression.Parameter(typeof(Employee), "c");Expression left2 = Expression.Property(param2,     typeof(Employee).GetProperty("City"));Expression pred2 = Expression.Lambda(left2, param2);  Select(e=>e.City)Expression expr1 = Expression.Call(typeof(Queryable), "Select",     new Type[] { typeof(Customer), typeof(string) },Expression.Constant(custs), pred1);  Select(c=>c.City)Expression expr2 = Expression.Call(typeof(Queryable), "Select",     new Type[] { typeof(Employee), typeof(string) }, Expression.Constant(employees), pred2);  //生成动态查询  IQueryable<string> q1 = db.Customers.AsQueryable().Provider.CreateQuery<string>(expr1);IQueryable<string> q2 = db.Employees.AsQueryable().Provider.CreateQuery<string>(expr2);  //并集  var q3 = q1.Union(q2);

生成的SQL语句为:

SELECT [t2].[City]  FROM   (    SELECT [t0].[City] FROM [dbo].[Customers] AS [t0]    UNION    SELECT [t1].[City] FROM [dbo].[Employees] AS [t1]    )   AS [t2]

“LINQ动态查询的方法有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: LINQ动态查询的方法有哪些

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

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

猜你喜欢
  • LINQ动态查询的方法有哪些
    本篇内容介绍了“LINQ动态查询的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在LINQ动态查询中,Lambda表达式是许多标准...
    99+
    2023-06-17
  • Linq to sql动态查询的方法有哪些
    这篇文章主要讲解了“Linq to sql动态查询的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linq to sql动态查询的方法有哪些”吧!1,Linq to sql动态查询...
    99+
    2023-06-17
  • Linq to sql动态查询的方法是什么
    本篇内容介绍了“Linq to sql动态查询的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Linq to sql动态...
    99+
    2023-06-17
  • 动态linq查询的实现方式是什么
    这篇文章主要介绍“动态linq查询的实现方式是什么”,在日常操作中,相信很多人在动态linq查询的实现方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”动态linq查询...
    99+
    2024-04-02
  • LINQ查询支持哪些语法
    这篇文章主要介绍“LINQ查询支持哪些语法”,在日常操作中,相信很多人在LINQ查询支持哪些语法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”LINQ查询支持哪些语法”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-17
  • LINQ动态查询怎么理解
    本篇内容主要讲解“LINQ动态查询怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“LINQ动态查询怎么理解”吧!LINQ动态查询有这样一个场景:应用程序可能会提供一个用户界面,用户可以使用...
    99+
    2023-06-17
  • LINQ查询基础知识有哪些
    本篇内容主要讲解“LINQ查询基础知识有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“LINQ查询基础知识有哪些”吧!LINQ查询基础知识 LINQ的读法:(1)lin k (2)lin q...
    99+
    2023-06-17
  • LINQ中有哪些查询操作符
    这篇文章给大家介绍LINQ中有哪些查询操作符,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。操作符和LINQLINQ自身功能非常强大,无论使用的是LINQto XML、LINQto DataSets、LINQto Ent...
    99+
    2023-06-17
  • LINQ+Ajax动态查询怎么使用
    本篇内容主要讲解“LINQ+Ajax动态查询怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“LINQ+Ajax动态查询怎么使用”吧!思路:前台发出请求 写明 调用的 modleName 和...
    99+
    2023-06-17
  • LINQ中怎么实现动态查询
    今天就跟大家聊聊有关LINQ中怎么实现动态查询,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。LINQ动态查询实现实例:case 'L': &nbs...
    99+
    2023-06-17
  • Tk.mybatis零sql语句实现动态sql查询的方法有哪些
    这篇文章主要讲解了“Tk.mybatis零sql语句实现动态sql查询的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Tk.mybatis零sql语句实现动态sql查询的方法有哪些...
    99+
    2023-06-21
  • LINQ查询表达式功能有哪些
    本篇内容主要讲解“LINQ查询表达式功能有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“LINQ查询表达式功能有哪些”吧!LINQ查询表达式是实现LINQ功能的重要部分,一般是通过相关关键字...
    99+
    2023-06-17
  • linq动态条件查询如何使用
    本篇内容主要讲解“linq动态条件查询如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linq动态条件查询如何使用”吧!1,linq动态条件之构造表达式树private Expr...
    99+
    2023-06-17
  • LINQ to SQL动态查询举例分析
    本篇内容介绍了“LINQ to SQL动态查询举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!LINQ to SQL动态查询使用LIN...
    99+
    2023-06-17
  • SQL查询方法有哪些
    SQL查询方法有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、 简单查询   简单的Transact-SQL查询只包括选择列表、FRO...
    99+
    2024-04-02
  • Linq中怎么实现动态条件查询
    本篇文章给大家分享的是有关Linq中怎么实现动态条件查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在开发项目的过程中,我们经常会遇到这样的需求,动态组合条件的查询。比如淘宝...
    99+
    2023-06-17
  • 域名查询的方法有哪些
    1. WHOIS查询:WHOIS是一种查询域名所有者、注册商、注册日期等信息的协议,可以在WHOIS查询网站上进行查询。2. DNS...
    99+
    2023-06-17
    域名查询 域名
  • SQL查询的解决方法有哪些
    本篇内容介绍了“SQL查询的解决方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!查询1下列表格由名...
    99+
    2024-04-02
  • MyBatis的批量查询方法有哪些
    这篇文章主要介绍了MyBatis的批量查询方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MyBatis的批量查询方法有哪些文章都会有所收获,下面我们一起来看看吧。一.直接循环插入@RestContro...
    99+
    2023-07-05
  • 查询ubuntu版本的方法有哪些
    本文小编为大家详细介绍“查询ubuntu版本的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“查询ubuntu版本的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。方法一:使用快捷键Ctrl+A...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作