博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linq to object简单描述
阅读量:4474 次
发布时间:2019-06-08

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

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

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

create proc sp_singleresultsetasset nocount onselect * from customers

  

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

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

    

[Function(Name="dbo.sp_singleresultset")]public ISingleResult
sp_singleresultset(){IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())));return ((ISingleResult
)(result.ReturnValue));}

  

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

  

SET FMTONLY ON;exec Northwind.dbo.sp_singleresultsetSET 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 = 0; Prec = 0; Scale = 0)
 

转载于:https://www.cnblogs.com/Peter-Luo/archive/2012/05/31/LinqToObject.html

你可能感兴趣的文章
MySql可视化工具MySQL Workbench使用教程
查看>>
个人站立会议第二阶段07
查看>>
云时代架构阅读笔记五——Web应用安全
查看>>
IOS 单击手势和cell点击冲突
查看>>
学习_HTML5_day3
查看>>
计算机网络与应用第二次笔记
查看>>
Django之ORM查询
查看>>
学习python第七天
查看>>
Flask基础(07)-->正则自定义转换器
查看>>
网站架构模式(二)
查看>>
【数据结构】算法 LinkList (Add Two Numbers)
查看>>
Bugtags:移动时代首选 Bug 管理系统
查看>>
hibernate学习笔记之一 hibernate简介
查看>>
定时任务quartz
查看>>
Set集合和实现类
查看>>
Ubuntu 12.04安装vim和配置
查看>>
centos配置jdk
查看>>
我在清华当工程师的日子
查看>>
mysql基础
查看>>
编程如写作
查看>>