如何在没有ORM的情况下使用存储过程返回多个结果集的LINQ to SQL?

lon*_*gda 5 linq-to-sql

http://blogs.msdn.com/b/dditweb/archive/2008/05/06/linq-to-sql-and-multiple-result-sets-in-stored-procedures.aspx

与此链接类似,但我正在处理的项目使用LINQ to SQL的ORM组件(我们更多地使用它来快速生成到db的ADO.Net接口).

目前,我们遵循的模式是:

var result = myDataContext.GetAllCustomersAndOrders();
Run Code Online (Sandbox Code Playgroud)

并且存储过程如下所示:

在此输入图像描述

我需要采取额外的步骤吗?我是否需要扩展生成的dbml或数据上下文部分类文件?

希望这是有道理的......解释起来有点困难,我发现的所有示例都使用dbml的ORM片段(将表拖放到dbml设计器表面).

bni*_*and 6

是的,你可以这样做,但我需要为你的dbml创建一个部分类.

因此,如果您的dbml文件是MyLinqToSQL.dbml

  • 打开dbml设计器
  • 将SP拖到设计图面上
  • 保存
  • 然后按F7.

这将创建一个MyLinqToSQL.cs的部分类.

现在...

  • 打开自动生成的MyLinqToSQL.designer.cs
  • 复制与SP同名的访问方法(要从中返回多个集合的那个).
  • 将其插入到刚刚创建的MyLinqToSQL.cs中的部分类的主体中.
  • 将方法的名称更改为至少略有不同的名称
  • 将返回类型从ISingleResult更改为IMultipleResult.
  • 使用System.Data.Linq.Mapping.ResultType属性装饰新类以定义返回集类型.

所有结果集都将在IQueryable的单个集合中返回.

然后,您可以使用反射来确定每个集合项的类型,然后将其转换为使用.

请参阅http://kishor-naik-dotnet.blogspot.com/2011/12/linq-multiple-result-set-of-procedure.html