0

MSDN 文档说我可以编写这样的存储过程

CREATE PROCEDURE MultipleResultTypesSequentially
AS
select * from products
select * from customers

然后像这样从 LINQ 读取它

IMultipleResults sprocResults =
    db.MultipleResultTypesSequentially();

// First read products. 
foreach (Product prod in sprocResults.GetResult<Product>())
{
    Console.WriteLine(prod.ProductID);
}

// Next read customers. 
foreach (Customer cust in sprocResults.GetResult<Customer>())
{
    Console.WriteLine(cust.CustomerID);
}

如果我的其中一个选择语句返回常规表对象以外的内容 - 带有连接或仅选择某些列怎么办?

如何让 LINQ 知道我想阅读下一个 SELECT ???基本上,我想知道的是 MSDN 中的这个示例首先读取产品,然后是客户,因为它们是按存储过程中的顺序编写的,或者正在编写.GetResult<Customer>()告诉 c# 以查找映射到类型客户的结果?对于这种未知类型,foreach 循环会是什么样子?

4

1 回答 1

1

我使用类似的存储过程进行了快速测试,发现如果您的foreach循环顺序不正确,InvalidOperationException则会抛出 an,因此 C# 似乎无法根据GetResult<>.

至于您的 select 语句返回的不是表格,如果您将存储过程从服务器资源管理器拖到 Linq to Sql 设计器上,设计器将根据过程输出自动生成一个类。我创建了一个包含几个连接表的过程,这两个表都不存在于我的项目中,Linq to Sql 为我创建了一个类型,命名为 StoredProcedureNameResult,因此名为 GetCreditCard 的过程有一个名为 GetCreditCardResult 的类型。

于 2013-05-09T02:13:10.560 回答