【问题标题】:linq to stored procedures multiple selectlinq 到存储过程多选
【发布时间】:2013-05-03 09:03:46
【问题描述】:

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);
}

如果我的一个 select 语句返回的不是常规表对象——带有连接或仅选择某些列,该怎么办?

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

【问题讨论】:

    标签: c# sql linq-to-sql


    【解决方案1】:

    我使用类似的存储过程进行了快速测试,发现如果您的 foreach 循环的顺序不正确,则会抛出 InvalidOperationException,因此看起来 C# 无法找到正确的结果基于GetResult&lt;&gt; 中使用的类型。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多