Discuz!NT
欢迎 游客 , 注册 | 登录 | 会员 | 界面 | 简洁版本 | 在线 | 帮助
商都网教育宝典宝库

发表新主题 回复该主题
本主题被查看1184次, 共1个帖子, 1页, 当前为第1页     选择页数: 1      跳转到第   上一主题   下一主题
标题: 简单地谈一下如何动态构造Linq查询.
张小峰
超级版主
UID: 14
来自:
精华: 4
积分: 313
帖子: 285
注册: 2007-8-23 10:27:00
状态: 离线
威望: 8.00
金钱: 75.55 元
只看楼主 2007-08-23 10:52
简单地谈一下如何动态构造Linq查询.
已经有些帖子告诉大家,如何构造Expression.
但是那些构造Expression的方法是很麻烦的,而且没有理解好IQueryable<T>的含义.
下面是一个很简单的动态构造查询的例子:
(也可以使用传统语法+Lambda:)


[align=left]
exec sp_executesql N'SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[RequiredDate], [t0].[ShippedDate], [t0].[ShipVia], [t0].[Freight], [t0].[ShipName], [t0].[ShipAddress], [t0].[ShipCity], [t0].[ShipRegion], [t0].[ShipPostalCode], [t0].[ShipCountry]
FROM [dbo].[Orders] AS [t0]
LEFT OUTER JOIN [dbo].[Customers] AS [t1] ON [t1].[CustomerID] = [t0].[CustomerID]
LEFT OUTER JOIN [dbo].[Shippers] AS [t2] ON [t2].[ShipperID] = [t0].[ShipVia]
WHERE ([t2].[CompanyName] LIKE @p0) AND ([t1].[CompanyName] LIKE @p1)', N'@p0 nvarchar(9),@p1 nvarchar(7)', @p0 = N'%Express%', @p1 = N'%Great%'

可以看到的是, query = from order in query .
是的. 一个query对象, 是可以继续被查下去的.
实际上,能做 from order in nc.Orders , 正是因为 nc.Orders 是实现 IQueryable<Order> .
当我们使用IQueryable<T> query=from x in IQueryable<T> 的时候, 正是从一个查询,添加了新的条件或选择, 返回另外一个查询.
这些查询,一直只是构造中. 如果它的ToArray()或者其他相关方法,(例如IEnumerable.GetEnumerator), 没有被执行, 那么这个查询就不会执行.


也可以使用传统语法+Lambda:
 



相关信息:

昨天晚上下载了C# Express 2008 VWD Express 2008 , 发现没有ASP.NET3.5…??
, 应该是说, 运行的还是ASP.NET2的环境, 新的语法无法在WEB中动态编译.
Linq的定义,from in where select的语法只能写在某个类库里,然后让Web去调用.

顺便用Reflector打开DLinq的实现. 发现原来还是挺简单的.

所以等我把现在的工作做完后, 我会推出 Linq To CSPAbstractRecord .



huahua 最后编辑于 2007-11-13 17:48:20
#1  
发表新主题 回复该主题
本主题被查看1184次, 共1个帖子, 1页, 当前为第1页     选择页数: 1      跳转到第







现在的时间是 2008-07-25 03:35:24

版权所有 商都网教育宝典
         Powered by Discuz!NT 1.0.6666    Copyright © 2001-2008 Comsenz Inc.
Processed in 0 seconds