2011-08-30 4 views
0

私は継承した古代のコードを書き直しています。大きなテーブルで大規模な結合を実行するクエリを見ていて、その結果のテーブルで一連のグループ化アクションを実行して、データ:1回の往復で、1つのLinQからSQL式に複数の結果を返すにはどうすればよいですか?

INSERT INTO #teh_temp_table 
SELECT * FROM teh_large_table 
INNER JOIN teh_other_large_table 

SELECT customer_id, customer_name FROM * #teh_temp_table 
GROUP BY customer_id, customer_name 
ORDER BY customer_name 

SELECT city_id, city_name FROM * #teh_temp_table 
GROUP BY city_id, city_name 
ORDER BY city_name 

-- repeated n-2 times ... 

この大規模なSQL文がADO.NET SqlCommandオブジェクトとDBサーバに送信され、データが1つのネットワーク・ラウンドトリップでのn別の結果として返されます。

これをLinQからSQLに変換するのは難しいです。私は次のようなことをやろうとしています:

from tlt in teh_large_table 
join tolt in teh_other_large_table on tlt.pkey equals tolt.fkey into teh_temp_table 

from tmp in teh_temp_Table 
group tmp by new { tmp.customer_id, tmp.customer_name } into customers 

from tmp in teh_temp_table 
group tmp by new { tmp.city_id, tmp.city_name } into cities 

select new { customers, cities } 

コンパイラは文句を言っています。単一のネットワーク往復で、データを取得するだけでなくそれを返す同等のLinQクエリを発行する方法はありますか?あなたが想像しているように、私はその厄介な参加を2回以上したいとは思わない。

答えて

0

結果セットを別に強制する以外に、ここでグループ操作を使用する利点はありません。 LINQ to SQLはLINQから複数の結果を返すことができないので、それらを一時テーブルにプッシュして、あるタイプに基づいて結果をグループ化することができます。あなたのために、次の作業になります。別の方法として

var bigTable = from large in teh_large_table 
       from other in teh_other_large_table 
       select new { ??? }; // TODO: Supply needed columns here 

var kvPairs = from customer in bigTable 
       select new {Id = customer.Customer_id, Name = customer.Customer_name, Type="Customer"} 
       .Union(
       from city in teh_temp_table 
       select new {Id = city.City_id, Name = city.City_name, Type="City"} 
      ).Distinct(); 

var groupedKvPairs = from pair in kvPairs 
        group pair by pair.Type into grouped 
        select new {pairType = key, 
           vals = from row in grouped 
             orderby row.Name 
             select new { row.Id, row.Name}}; 

は、あなたはまた、複数の結果を返すストアドプロシージャを設定し、それらを消費するIMultipleResultsインターフェイスを使用することができます。 http://www.thinqlinq.com/Default/Using-LINQ-to-SQL-to-return-Multiple-Results.aspx

関連する問題