Comment itérer sur les résultats d'un résultat de requête linq-to-sql et append les résultats?

Je suis nouveau en C # et Linq-to-Sql.

J'ai une table 'InstrumentTypes' de ce formulaire:

typeId(int) | type(varchar) | subttype(varchar) 101 Keys keyboard 102 Keys accessories 103 Guitar acoustic 104 Guitar elecsortingc 

J'ai besoin de récupérer tous les 'typesId' de la table basés sur une search par 'type' comme input, et tous les typesId doivent être liés à un répéteur ASP.

Jusqu'à présent, j'ai écrit le code suivant:

 // 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 } 

Je n'arrive pas à comprendre comment parcourir les résultats de la requête, les stocker dans une structure de données et les lier à un répéteur.

Le code suivant le lie au répéteur:

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

Quelqu'un pourrait-il m'aider s'il vous plaît?

EDIT: Pour chaque typeID obtenu, je veux accéder à une autre table 'Instruments' et récupérer tous les Instruments appartenant à ce typeId. La table 'Instruments' est comme ceci:

 instrumentId typeID name description 1000 101 yamaha xyz 

Basé sur la réponse d'Arialdo, je fais ceci:

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

Mais je reçois une erreur de compilation disant "La meilleure méthode surchargée pour la list a des arguments invalides". Où vais-je mal?

Ce que vous obtenez de

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

est une collection de InstrumentTypes d' InstrumentTypes , pas une collection d'identifiants.

Cela fonctionne pour moi

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

que vous pourriez facilement convertir en

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

[Modifier]

Vous pouvez directement interroger vos instruments et accéder aux objects associés, à condition que vous définissiez une relation entre InstrumentType et Instrument .

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

Pas besoin d'avoir des requêtes ou des requêtes séparées. Le i.InstrumentType va convertir en une join , comme vous pouvez vérifier avec un profileur SQL

Je ne suis pas sûr de ce que vous requestz.

Sans définir explicitement le type renvoyé de votre requête, vous renvoyez déjà un object IEnumerable <InstrumentTypes>. Si vous voulez une list d'ID, vous pouvez simplement affiner votre requête pour renvoyer des ID plutôt qu'une list de types d'instrument. Bien sûr, vous returnneriez un object IEnumerable <int>.

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