博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linq 动态查询库
阅读量:6220 次
发布时间:2019-06-21

本文共 1578 字,大约阅读时间需要 5 分钟。

【原文地址】

【原文发表日期】 Monday, January 07, 2008 11:02 PM

LINQ (语言级集成查询)是VS 2008 和 .NET 3.5中提供的一个新特性。LINQ使得数据查询的概念成为.NET中的一等编程概念,允许你在你喜欢的编程语言中有效地表达查询。

LINQ的一个好处是,它允许你使用 VB 和 C#. 编写类安全的查询。这意味着,对你的代码,你会得到对LINQ查询的编译时检查,以及完整的intellisense和重构支持:

step16.jpg

类安全的查询可用于大多数的场景,但也有些情形,你需要能在运行时动态构建查询的灵活性。例如,你也许要在应用中提供商业智能的界面,允许业务分析员用户使用下拉框在数据之上构造和表达他们自己的自定义查询/视图。

按惯例,这类动态查询场景经常是通过把字符串连接起来构建成动态SQL查询的方式来处理的。最近有几个人通过电邮问我该如何使用LINQ来处理这类场景。下面的贴子内容将描述如何使用LINQ开发团队提供的“动态查询库(Dynamic Query Library)”来动态地构建LINQ查询。

下载LINQ动态查询库

上包括了指向一个VB和C#样例包的链接,该样例包内含一个很酷的动态查询LINQ辅助库。该动态查询库(以及相关文档)的直接链接如下:

VB和C#的DynamicQuery例程都包括了一个辅助库的源码实现,该辅助库允许你使用接受字符串参数(而不是类安全的语言运算符)的扩展方法来表示LINQ查询。你可以把C#或VB的DynamicQuery库的实现拷贝到你自己的项目中,然后在适当的地方根据用户的输入用它来动态地构建LINQ查询。

动态查询库的简单示例

你可以将DynamicQuery库用于任何LINQ数据provider,这些provider包括, LINQ to Objects, LINQ to XML, LINQ to Entities, , 等等。动态查询库不是使用语言级的运算符或类安全的 lambda 扩展方法来构建LINQ查询,而是提供给你基于字符串的扩展方法,你可以用这些方法来传递任何字符串表达式。

例如,下面是用VB编写的一个标准的类安全LINQ to SQL查询,从 Northwind 数据库中获取数据,然后在一个ASP.NET GridView 控件中做显示:

step1.png

使用LINQ DynamicQuery库,我可以将上面的查询表达式重写成:

step2.png 

注意,其中的条件式 where 子句和排序的 orderby 子句现在接受字符串表达式,而不是代码表达式。因为它们是后期绑定字符串,我可以动态地构建它们。例如,我可以提供界面给业务分析员用户,允许他们自己构建查询(包括任意的条件子句)。

动态查询库文档

在上面的 VB 和 C# 动态查询例程中还有一些HTML文档,详细描述了如何使用动态查询库中的扩展方法。如果你想要更深入地使用这个辅助库的话,这些文档绝对是值得一读的:

step5.png 

下载和运行动态查询库的样例

你可以下载和运行我编写的 VB 和C# 基本例程,在其中我示范了在一个ASP.NET 网站项目中使用动态的LINQ库对Northwind数据库进行LINQ to SQL查询:

你可以使用免费的Visual Web Developer 2008 Express版或者VS 2008打开运行这些项目。

构建动态LINQ查询的其他方法

动态查询库简单易用,在那些查询是完全动态,你要提供界面给用户,助他们构建这些动态查询的场景下尤其有用。

在将来的贴子里,我将对构建动态LINQ查询做深入探讨,讨论如何使用类安全的predicate方法来对你的代码进行结构化(《 》一书的作者Joseph 和 Ben Albahari,对此有个很精彩的贴子,在 )。

希望本文对你有所帮助

转载地址:http://ntoja.baihongyu.com/

你可能感兴趣的文章
批次导入程序
查看>>
UITextField,UITextView字数限制
查看>>
使用记事本编写html代码并运行
查看>>
使用 ipmitool 实现 Linux 系统下对服务器的 ipmi 管理
查看>>
python __init__.py
查看>>
VS2012 处理器架构“x86”不匹配 通过配置管理器更改您的项目的目标处理器架构...
查看>>
(5)kendo UI使用基础介绍与问题整理——Grid问题/显示效果的一些问题
查看>>
sql去除重复记录 且保留id最小的 没用
查看>>
建筑保温(复习) 灭火救援设施(一)
查看>>
hadoop1.2.1配置与运行子串统计程序
查看>>
手把手教你学会 Emacs 定制
查看>>
ProGuard代码混淆技术详解
查看>>
HDU 1043 Eight (A* + HASH + 康托展开)
查看>>
[转载] 财经郎眼20120714:民生小事大过天
查看>>
Android 在安装完成界面,点击打开应用程序。在应用程序点击home键,再从桌面打开程序导致产生多个实例或者说程序被重复打开...
查看>>
《软件工程课程总结》
查看>>
js+cookie 购物车
查看>>
Luogu P5296 [北京省选集训2019]生成树计数
查看>>
ActiveMq-拦截创建消息队列
查看>>
【6】使用nginx
查看>>