2013-07-11 6 views
0

J'ai suivi la question sur la question que je posais hererequête LINQ to SQL sous-requête

ici sont tous mes Linq requête

Ceci est la requête 1:

var RCode = from a in DbEntity.MobileAssetDowntimeReasonCodes 
      where a.MobileAssetCategoryId.Equals(reasonCode) 
      select new 
      { 
       a.JdeReasonCode 
      }; 

ReasonCode.DataSource = RCode.ToList(); 
ReasonCode.DataBind(); 

cette apporte une les codes résultants qui sont affichés dans DataGrid.

ici est la requête 2, qui travaille également

var RJDEReasonCode = from a in JDETable.F0005 
           where 
            a.DRSY.Equals("00") && 
            a.DRDL01 != null && 
            (a.DRRT.Equals("W4") || 
            a.DRRT.Equals("W5")) && 
            a.DRKY.Trim() == "801" 
           select new 
           { 
            CATEGORY_CODE = a.DRRT, 
            REASON_CODE = a.DRKY, 
            DESCRIPTION = a.DRDL01 
           }; 

Mais au lieu de coder en dur « 801 » Je veux passer le résultat de l'query1 pour interroger 2 et affichage requête 2 résultats dans mon DataGrid. comment je fais ça ?

+0

La requête # 1 renvoie-elle «801»? Essayez 'a.DRKY.Trim() == RCode.FirstorDefault(). JdeReasonCode' –

+0

requête on retourne une liste de codes tels que 801, 802,803 et je veux exécuter chaque code dans la deuxième requête pour obtenir les détails de ce code et affichez – user2315840

+0

Vous pouvez faire cela en boucle, et concaténer les résultats de chaque itération à une seule collection. Ou vous pourriez modifier votre déclaration LINQ pour être quelque chose de similaire à: 'RCode.Contains (a.DRKY.Trim())' –

Répondre

2

Quelque chose comme ça?

List<string> RCode = DbEntity.MobileAssetDowntimeReasonCodes 
    .Where(a=>a.MobileAssetCategoryID.Equals(reasonCode)) 
    .Select(a=>a.JdeReasonCode).ToList(); 

var RJDEReasonCode = JDETable.F0005 
    .Where(a=>a.DRSY.Equals("00") && a.DRDL01 != null && 
      (a.DRRT.Equals("W4") || a.DRRT.Equals("W5")) && 
       RCode.Any(code => code.Contains(a.DRKY.Trim()))) 
    .Select(a=>new { CATEGORY_CODE = a.DRRT, 
        REASON_CODE = a.DRKY, 
        DESCRIPTION = a.DRDL01 
    }); 

Utilise la Enumerable.Any Method pour vérifier si les codeR récupérés sont l'un des codes dans votre table de F0005.

+0

Il manque quelque chose à la syntaxe .Select (a => a.JdeReasonCode) .ToList()); et .Sélectionner (a => nouveau {CATEGORY_CODE = a.DRRT, montre l'erreur, il dit 'bool' ne contient pas de définition pour 'select' et aucune méthode d'extension .. – user2315840

+0

@ user2315840 Désolé, il me manquait un crochet sur chacun –

+0

this Worked.Merci tellement d'apprentissage Linq est une expérience merveilleuse – user2315840

0
var RJDEReasonCode = from a in JDETable.F0005 
        where 
         a.DRSY.Equals("00") && 
         a.DRDL01 != null && 
         (a.DRRT.Equals("W4") || 
         a.DRRT.Equals("W5")) && 
         //and use it checking if it contains a.DRKY.Trim() 
         RCode.Contains(a.DRKY.Trim()) 
         select new 
         { 
            CATEGORY_CODE = a.DRRT, 
            REASON_CODE = a.DRKY, 
            DESCRIPTION = a.DRDL01 
         }; 
+0

pouvez-vous élaborer votre réponse un peu. Je ne comprends pas cela comme je suis nouveau à Linq – user2315840

+0

essayez édité la réponse –

+0

Ne fonctionne pas il dit que Contains a un argument non valide et la deuxième erreur dit Argument1: connot convertir de 'chaîne à' anonyme type # 1 ' – user2315840