`
jiasongmao
  • 浏览: 648783 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

linq to sql 操作存储过程、函数总结(二)

    博客分类:
  • .NET
阅读更多

将我们的存储过程像上面那样让它返回一个"Product"对象的其中一个非常酷的事情是:linq to sql 将会像跟踪通过linq 查询返回的产品对象那样自动跟踪的通过该存储过程返回的product对象的变化。当我们调用这个DataContext类上的"SubmitChanges()"方法时,我们对该对象所做的任何的变动将会自动地被保存回数据库中。


例如,我们可以写如下的代码来(用存储过程)检索数据,并且将某一类别的所有产品的价格变为当前值的90%:

 

在最后调用SubmitChange()方法是,它就会自动地通过调用事务对所有的产品的价格进行更新。

 

处理存储过程的输出参数


linq to sql 将存储过程中的输出参数映射为了一个引用参数(ref keyword),对于值类型的,将参数声明为了可空(nullable)类型。


例如,看一下下面的这个存储过程"GetCustomerDetails",该存储过程将CustomerID作为输入参数,查询的返回值是该Customer的订单历史以及它的将公司名作为输出参数:

 

如果我们将上面的存储过程拖到我们的“Order"类上,我们就可以通过写如下的代码来调用它:

 

 

 

注意上面的代码,存储过程助手方法是如何帮助一个产品对象序列的,并且也将CompanyName作为一个输出参数返回给助手方法。
 


处理存储过程返回的多种返回结果

当一个存储过程可能返回多种结果集是,该在DataContext中的存储过程方法就不可以声明为某单一一种类型的强返回值类型了。例如,看一下如下的存储过程,它根据输出参数的不同可能会返回一个产品结果集,也可以返回一个订单结果集。

 

linq to sql 支持生成一个存储过程助手方法来执行该存储过程并且返回一个如下的IMultipleReulst对象,该方法可以通过向项目中添加一个"NorthwindDataContext"类来返回Product或者是Order类型:

 

一旦我们该方法添加到我们的项目中,当我们使用的时候就可以调用它并且将结果集或者转换为Product或者是Order序列:

 

 

对用户自定义函数的支持(UDFS)


除了支持存储过程,linq to sql 也支持scalar-valued和table-valued的用户自定义函数,存储过程和自定义函数是地位相等同的。一旦将自定义函数作为方法添加到了你的DataContext中,你就可以在linq 查询中使用它们了。

例如,看一下下面这个简单的用户自定义函数"MyUpperFunction":

 

我们可以通过将它从VS Server Explorer中拖到linq to sql 设计器中,作为我们的DataContext上的一个方法添加进来:

 

 

当对该linq to sql数据模型来写linq 表达式时,我们就可以用linq表达式来调用该自定义函数(注意它在下面的"where"语句中使用到了):

 

总结

 

linq to sql 支持调用数据库中的存储过程和自定义函数,并且能够很好地将它们和我们的数据库模型进行集成。在这篇博客中我讲述了如何通过调用存储过程来方便地检索数据并且从数据模型类中取出我们需要的数据来。在下本系列的下一篇博客中,我将会讲解在调用SubmitChanges()方法将变动保存至数据库中时,如何调用存储过程来替代更新、插入、删除逻辑。
 

 

 转载地址:http://www.cnblogs.com/hanxianlong

分享到:
评论

相关推荐

    LINQ to SQL手册

    LINQ to SQL语句(1)之...LINQ to SQL语句(20)之存储过程 LINQ to SQL语句(21)之用户定义函数 LINQ to SQL语句(22)之DataContext LINQ to SQL语句(23)之动态查询 LINQ to SQL语句(24)之视图 LINQ to SQL语句(25)之继承

    LINQ_to_SQL语法及实例大全

    LINQ to SQL语句(20)之存储过程 63 1.标量返回 63 2.单一结 果集 64 3.多个可 能形状的单一结果集 65 4.多个结果集 70 5.带输出参数 79 LINQ to SQL语句(21)之用户定义函数 80 1.在Select中使用用户定义的标量函数 ...

    LINQ 实战 7/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 1/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 3/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 4/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 2/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 11/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 5/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 6/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 8/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 10/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 9/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 的标准查询操作符

    然后,各种 LINQ 提供程序,如 LINQ to Objects(可利用它根据对象层次结构编写查询)和 LINQ to Entities(可利用它根据实体框架的概念模型编写查询)可根据代表数据存储的细微差别来有效处理这些查询。 除强类型化...

    LINQPad 5.25.00 高级版(自动完成,代码格式化)

    LINQPad 也是一个很好的学习LINQ的工具,包含《C# 3.0 in a Nutshell》一书中200个示例,可以使用LINQPad感受LINQ的...LINQPad也支持所有的.NET Framework中的LINQ API,包括LINQ到XML,PLINQ,LINQ to SQL和实体框架。

    ASP.NET 控件的使用

    16.1.4 绑定到LINQ to SQL查询 502 16.1.5 绑定到Web服务 503 16.2 使用ObjectDataSource控件与参数 506 16.2.1 使用不同的参数类型 509 16.2.2 作为参数传递对象 511 16.3 使用ObjectDataSource控件分页、排序和...

    ASP.NET.4揭秘

    20.3.1 linq to objects与linq to sql741 20.3.2 使用linq to sql进行选择742 20.3.3 使用linq to sql进行插入748 20.3.4 使用linq to sql进行更新751 20.3.5 使用linq to sql进行删除754 20.3.6 动态查询755 20.3.7...

Global site tag (gtag.js) - Google Analytics