2012-04-16 22 views
2

私はC#とLinq-to-Sqlの新機能です。linq-to-sqlクエリ結果の結果を反復処理して結果を追加する方法はありますか?

私はテーブルをした「InstrumentTypes」は、このフォームの:

typeId(int) | type(varchar) | subttype(varchar) 

101    Keys   keyboard 
102    Keys   accessories 
103    Guitar   acoustic 
104    Guitar   electric 

私が入力としてタイプ 『「による検索に基づいてテーブルからTYPEIDのの』すべてを取得する必要があり、すべてのtypeidのに必要なASPリピータにバインドされます。

これまでのところ、私は次のコードを書いている:私は、クエリからの結果を反復処理するデータ構造に保存し、リピータにバインドする方法を見つけ出すことができないんだ

// requestType contains the type from the search 
var type = (from m in database.InstrumentTypes 
      where m.type == requestType 
      select m); 
foreach(var typeId in type) 
{ 
    //code 
} 

を。

次のコードでは、リピータにバインド:

Repeater1.DataSource= //name of data structure used to store the types goes here 
Repeater1.DataBind(); 

誰も私を助けてくださいもらえますか?

EDIT: 取得した各typeIDについて、別のテーブル「Instruments」にアクセスし、そのタイプIDに属するすべてのInstrumentsを取得したいとします。 テーブル「楽器」は、このようなものです:

instrumentId  typeID name  description 
1000    101  yamaha xyz 

アリアルドの回答に基づいて、私はこれをやっている:

var type = (from m in database.InstrumentTypes 
          where m.type == requestType 
          select m); 
      var instruments = new List<Instrument>(); 
      foreach (var i in type) 
      { 
       instruments.Add(from x in database.Instruments 
           where x.typeId == i.typeId 
           select x); 
      } 
      Repeater1.DataSource = instruments; 
      Repeater1.DataBind(); 

をしかし、私は「の最良のオーバーロードされたメソッドの試合を言ってコンパイル・エラーが発生しますリストに無効な引数がいくつかあります。どこが間違っていますか?あなたは

var type = (from m in database.InstrumentTypes 
     where m.type == requestType 
     select m); 

から何を得る

+0

"結果を繰り返して検索する" - なぜ結果をループしたいのですか?どのような種類のデータ構造ですか? – SkonJeet

+0

@SkonJeet:私は上記の質問を更新しました。 – codewarrior

答えて

7

InstrumentTypesの集まりではなく、IDのコレクションです。

これは私

あなたが簡単に[編集]

あなたが直接限り、あなたの楽器を照会し、関連オブジェクトにナビゲートすることができます

var ids = (from m in database.InstrumentTypes 
     where m.type == requestType 
     select m.Id).ToList(); 

に変換することができ

var types = (from m in database.InstrumentTypes 
     where m.type == requestType 
     select m); 
var ids = new List<int>(); 
foreach (var type in types) 
{ 
    ids.Add(type.Id); 
} 

のために働きますInstrumentTypeInstrumentの間の関係を定義しました。別のforeach ESまたはクエリを持っている

var instruments = (from i in database.Instrument 
         where i.InstrumentType.type == requestType 
         select i); 

必要はありません。 i.InstrumentTypejoinに変換されます。これはSQLプロファイラで確認できるので

+0

返信いただきありがとうございます!私は私の質問を更新しました。あなたは見てみることができますか? – codewarrior

+1

素晴らしいですが、私はあなたがそれを直接行うことができるのか分かりませんでした。ありがとうございますArialdo! – codewarrior

3

私はあなたに何を求めているのかよく分かりません。

返されるクエリの型を明示的に定義しておらず、すでにIEnumerable <InstrumentTypes>オブジェクトを返しています。 IDのリストが必要な場合は、単にInstrumentTypesのリストではなく、IDを返すようにクエリを絞り込むことができます。もちろん、IEnumerable <int>オブジェクトを返すでしょう。

var type = (from m in database.InstrumentTypes 
     where m.type == requestType 
     select m.typeId); 
関連する問題