Linq to object简单描述
2012-05-31 18:44
363 查看
学习Linq to object时,经常会遇到Linq to object问题,这里将介绍XX问题的解决方法。
普通存储过程,首先在查询分析器运行下面的代码来创建一个存储过程:
然后打开IDE的服务器资源管理器,之前我们从表中拖动表到dbml设计视图,这次我们从存储过程中找到刚才创建的存储过程,然后拖动到设计视图。在方法面板中可以看到已经创建了一个sp_singleresultset的方法
然后打开Northwind.designer.cs,可以找到下面的代码:
我们可以发现,IDE为这个存储过程单独生成了返回结果集的实体定义,你可能会觉得很奇怪,IDE怎么知道这个存储过程将会返回哪些数据那?其实,在把存储过程拖拽入dbml设计视图的时候,IDE就执行了类似下面的命令:
这样就可以直接获取存储过程返回的元数据而无须执行存储过程。
其实我们存储过程返回的就是顾客表的数据,如果你觉得为存储过程单独设置结果集实体有些浪费的话可以在存储过程的属性窗口中调整返回类型从“自动生成的类型”到Customer,不过以后你只能通过删除方法面板中的存储过程,然后重新添加来还原到“自动生成的类型”。下面,我们可以写如下的Linq to object代码进行查询:
var 单结果集存储过程 = from c in ctx.sp_singleresultset()
where c.CustomerID.StartsWith("A")
select c;
在这里确实是Linq to object的,因为查询句法不会被整句翻译成SQL,而是从存储过程的返回对象中再去对对象进行查询。SQL代码如下:
EXEC @RETURN_VALUE = [dbo].[sp_singleresultset]
-- @RETURN_VALUE: Output Int32 (Size = 0; Prec = 0; Scale = 0)
[align=right] [/align]
普通存储过程,首先在查询分析器运行下面的代码来创建一个存储过程:
create proc sp_singleresultset as set nocount on select * from customers
然后打开IDE的服务器资源管理器,之前我们从表中拖动表到dbml设计视图,这次我们从存储过程中找到刚才创建的存储过程,然后拖动到设计视图。在方法面板中可以看到已经创建了一个sp_singleresultset的方法
然后打开Northwind.designer.cs,可以找到下面的代码:
[Function(Name="dbo.sp_singleresultset")] public ISingleResult<sp_singleresultsetResult> sp_singleresultset() { IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod()))); return ((ISingleResult<sp_singleresultsetResult>)(result.ReturnValue)); }
我们可以发现,IDE为这个存储过程单独生成了返回结果集的实体定义,你可能会觉得很奇怪,IDE怎么知道这个存储过程将会返回哪些数据那?其实,在把存储过程拖拽入dbml设计视图的时候,IDE就执行了类似下面的命令:
SET FMTONLY ON; exec Northwind.dbo.sp_singleresultset SET FMTONLY OFF;
这样就可以直接获取存储过程返回的元数据而无须执行存储过程。
其实我们存储过程返回的就是顾客表的数据,如果你觉得为存储过程单独设置结果集实体有些浪费的话可以在存储过程的属性窗口中调整返回类型从“自动生成的类型”到Customer,不过以后你只能通过删除方法面板中的存储过程,然后重新添加来还原到“自动生成的类型”。下面,我们可以写如下的Linq to object代码进行查询:
var 单结果集存储过程 = from c in ctx.sp_singleresultset()
where c.CustomerID.StartsWith("A")
select c;
在这里确实是Linq to object的,因为查询句法不会被整句翻译成SQL,而是从存储过程的返回对象中再去对对象进行查询。SQL代码如下:
EXEC @RETURN_VALUE = [dbo].[sp_singleresultset]
-- @RETURN_VALUE: Output Int32 (Size = 0; Prec = 0; Scale = 0)
[align=right] [/align]
相关文章推荐
- 简单介绍及安装Linq To Object的扩展类库MoreLinq
- LINQ to Entities 事务简单例子
- LINQ系列:Linq to Object聚合操作符
- Linq学习笔记(三)Linq To Object查询操作符
- 一个简单的Linq to TreeNode
- asp.net MVC + linq to Entity简单教程(一)MVC的建立与Entity的建立
- Linq To Sql 简单的单表批量删除
- Linq to EF 与Linq to Object 使用心得
- 简单的linq to sql 的例子 ,实现了增删改查
- 【转】Linq to EF 与Linq to Object 使用心得
- Linq To EF简单的增、删、查、改
- LinQ to Object
- LinQ to Object --- 有关于Dictionary、SQL(LEFT OUTER JOIN \ Group OrderBy Sum) 操作
- Linq to sql实现简单查询和分页
- 简单的优化处理 By LINQ TO SQL
- 1.解剖Linq to object
- EF Linq To Entities ObjectManager 已存在相同键无法再Attach的解决方案
- Linq to Object 深入理解(一):了解Linq之前的基础知识
- 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变
- Linq To Sql 简单的单表批量删除