如何我们需要在LINQ TO SQL中调用一个存储过程,它如果会返回多个结果集,这可能会稍微麻烦一点。下面来看一个范例
存储过程:
ALTER PROCEDURE dbo.MultiResultQuery /* ( @parameter1 int = 5, @parameter2 datatype OUTPUT ) */ AS /* SET NOCOUNT ON */ SELECT * FROM Orders; SELECT * FROM Customers;
将该存储过程拖拽到LINQ TO SQL的设计器上
我们看看设计器帮我们生成了什么方法
它生成了一个方法,同时还生成了一个特定的类型:“MultiResultQuery_个结果”
这显然不是我们想要的结果。我们当然希望直接通过Customers或者Orders去接收结果。那么怎么办呢?
首先,我们将这个“MultiResultQuery_个结果”删除掉,然后修改一下MultiResultQuery方法
[Function(Name="dbo.MultiResultQuery")] [ResultType(typeof(Customers))] [ResultType(typeof(Orders))] public IMultipleResults MultiResultQuery() { IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod()))); return ((IMultipleResults)(result.ReturnValue)); }
那么,下面来看看如何使用这个存储过程
using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { NorthwindDataContext db = new NorthwindDataContext(); db.Log = Console.Out; var result = db.MultiResultQuery(); var orders = result.GetResult<Orders>(); var customers = result.GetResult<Customers>(); foreach (var item in orders) { Console.Write(item.OrderID); } foreach (var item in customers) { Console.Write(item.CustomerID); } } } }