LINQ TO SQL:如何接收多个结果集

本文介绍如何在 LINQ to SQL 中正确调用返回多个结果集的存储过程,并提供了一个具体的示例代码。通过修改 LINQ 生成的方法并指定返回类型,可以分别获取每个结果集的数据。

如何我们需要在LINQ TO SQL中调用一个存储过程,它如果会返回多个结果集,这可能会稍微麻烦一点。下面来看一个范例

存储过程:

ALTER PROCEDURE dbo.MultiResultQuery
    /*
    (
    @parameter1 int = 5,
    @parameter2 datatype OUTPUT
    )
    */
AS
    /* SET NOCOUNT ON */
    SELECT * FROM Orders;
    SELECT * FROM Customers;

image

将该存储过程拖拽到LINQ TO SQL的设计器上

image

我们看看设计器帮我们生成了什么方法

image

它生成了一个方法,同时还生成了一个特定的类型:“MultiResultQuery_个结果”

image

这显然不是我们想要的结果。我们当然希望直接通过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);
            }
        }


    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值