Linq to object简单描述

开发 后端
这里介绍Linq to object,因为查询句法不会被整句翻译成SQL,而是从存储过程的返回对象中再去对对象进行查询。

学习Linq to object时,经常会遇到Linq to object问题,这里将介绍XX问题的解决方法。

普通存储过程,首先在查询分析器运行下面的代码来创建一个存储过程:

  1. create proc sp_singleresultset  
  2. as  
  3. set nocount on  
  4. select * from customers 

然后打开IDE的服务器资源管理器,之前我们从表中拖动表到dbml设计视图,这次我们从存储过程中找到刚才创建的存储过程,然后拖动到设计视图。在方法面板中可以看到已经创建了一个sp_singleresultset的方法

然后打开Northwind.designer.cs,可以找到下面的代码:

  1. [Function(Name="dbo.sp_singleresultset")]  
  2. public ISingleResult<sp_singleresultsetResult> sp_singleresultset()  
  3. {  
  4. IExecuteResult result = this.ExecuteMethodCall(this, 
    ((MethodInfo)(MethodInfo.GetCurrentMethod())));  
  5. return ((ISingleResult<sp_singleresultsetResult>)(result.ReturnValue));  

我们可以发现,IDE为这个存储过程单独生成了返回结果集的实体定义,你可能会觉得很奇怪,IDE怎么知道这个存储过程将会返回哪些数据那?其实,在把存储过程拖拽入dbml设计视图的时候,IDE就执行了类似下面的命令:

  1. SET FMTONLY ON;  
  2. exec Northwind.dbo.sp_singleresultset  
  3. SET FMTONLY OFF; 

这样就可以直接获取存储过程返回的元数据而无须执行存储过程。

其实我们存储过程返回的就是顾客表的数据,如果你觉得为存储过程单独设置结果集实体有些浪费的话可以在存储过程的属性窗口中调整返回类型从“自动生成的类型”到Customer,不过以后你只能通过删除方法面板中的存储过程,然后重新添加来还原到“自动生成的类型”。下面,我们可以写如下的Linq to object代码进行查询:

  1. var 单结果集存储过程 =  from c in ctx.sp_singleresultset()  
  2. where c.CustomerID.StartsWith("A")  
  3. select c; 

在这里确实是Linq to object的,因为查询句法不会被整句翻译成SQL,而是从存储过程的返回对象中再去对对象进行查询。SQL代码如下:

  1. EXEC @RETURN_VALUE = [dbo].[sp_singleresultset]  
  2. -- @RETURN_VALUE: Output Int32 (Size = 0Prec = 0Scale = 0)

【编辑推荐】

  1. Linq结果集形状概述
  2. Linq存储过程返回详解
  3. Linq调用LoadProducts方法
  4. Linq使用数据表简单描述
  5. Linq对象引用简单介绍
责任编辑:佚名 来源: IT168
相关推荐

2009-09-15 16:26:36

Linq orderb

2009-09-18 16:00:07

LINQ架构

2009-09-14 10:57:46

LINQ入门

2009-09-14 10:20:52

LINQ查询语法

2009-09-11 10:20:36

Linq扩展方法

2009-09-17 09:24:57

Linq实现分页

2009-09-08 09:24:50

LINQ查询

2009-09-10 09:09:40

Linq实体继承

2009-09-11 12:32:33

LINQ表达式

2009-09-09 13:07:37

创建Linq数据库

2009-09-09 11:24:13

Linq使用数据表

2009-09-09 15:37:27

Linq DataLo

2009-09-14 15:43:12

Linq Settin

2009-09-10 10:37:15

LINQ to SQL

2009-09-16 09:38:27

LINQ To SQL

2009-09-10 15:26:03

Linq City集合

2009-09-15 11:14:33

LINQ to SQL

2009-09-14 16:33:55

LINQ To XML

2009-09-09 11:14:04

Linq多个结果集

2009-09-18 13:53:09

LINQ工具集
点赞
收藏

51CTO技术栈公众号