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

select ステートメントの 1 つが通常のテーブル オブジェクト以外のものを返した場合 (結合または特定の列の選択のみ) はどうなりますか?

次の SELECT を読み取りたいことを LINQ に知らせるにはどうすればよいですか ??? 基本的に、私が疑問に思っているのは、ストアドプロシージャでその順序で書かれているため、最初に製品を読んでから顧客を読んでいるMSDNのこの例.GetResult<Customer>()です。また、この未知のタイプの foreach ループはどのように見えるでしょうか?

4

1 に答える 1

1

同様のストアド プロシージャを使用して簡単なテストを行ったところ、foreachループの順序が正しくない場合、InvalidOperationExceptionがスローされるため、C# で使用される型に基づいて正しい結果を見つけることができないように見えますGetResult<>

テーブル以外のものを返す select ステートメントについては、サーバー エクスプローラーからストアド プロシージャを Linq to Sql デザイナーにドラッグすると、デザイナーはプロシージャの出力に基づいてクラスを自動生成します。私のプロジェクトにはどちらも存在しなかったいくつかの結合テーブルを使用してプロシージャを作成し、Linq to Sql が StoredProcedureNameResult のような名前の型を作成したため、GetCreditCard というプロシージャには GetCreditCardResult という名前の型がありました。

于 2013-05-09T02:13:10.560 に答える