2008-11-19 15 views
2

EDIT: Pour les requêtes internes, il peut y avoir plus d'une correspondance par requête interne. Il attrape un tas de tags avec le même game_ID. Thats pourquoi. Premièrement ou .Max ne fonctionnera pas.Aide Linq. int.Contains et int == iqueryable ne fonctionnent pas

Besoin d'aide, j'ai une requête dans LINQ qui ressemble à ceci:

from yy in Tags_Lookups 
where yy.Tag_ID == (from xx in Tags_Lookups 
where xx.Game_ID == new Guid("4962d645-711c-4db8-a7ce-ae9b36dd730c") 
select xx.Tag_ID) 
select yy 

Je reçois une erreur qui ressemble à ceci:

opérateur « == » ne peut pas être appliqué aux opérandes de type 'int' et 'System.Linq.IQueryable'

J'ai aussi essayé sans succès:

from yy in Tags_Lookups 
where yy.Tag_ID.Contains(from xx in Tags_Lookups 
where xx.Game_ID == new Guid("4962d645-711c-4db8-a7ce-ae9b36dd730c") 
select xx.Tag_ID) 
select yy 

Avec cette erreur:

« int » ne contient pas de définition pour « Contient » et aucune méthode d'extension « Contient » d'accepter un premier argument de type « int » pourrait être trouvé

Quelqu'un peut-il me aider à écrire un bonne requête qui va fonctionner?

Répondre

2

Étant donné que votre requête interne peut renvoyer plusieurs correspondances, il suffit de convertir la requête interne en liste et d'inverser le sens de la clause contains, je pense.

from yy in Tags_Lookups 
where (from xx in Tags_Lookups 
     where xx.Game_ID == new Guid("4962d645-711c-4db8-a7ce-ae9b36dd730c") 
     select xx.Tag_ID).ToList() 
         .Contains(yy.Tag_ID) 
select yy 

EDIT requête modifiée sur la base de nouvelles informations.

+0

Regardez l'EDIT. –

+0

Pour le pire, je ne peux pas vous confirmer tous les deux comme la réponse. –

+0

On dirait que celui-ci est plus rapide même s'il a plus de lignes de syntaxes LINQ et T-SQL. en quelques millisecondes .... –

0

Au lieu de Max(), il devrait probablement être SingleOrDefault(), car vous ne devriez jamais avoir plus d'un enregistrement avec une recherche GUID. Les deux vont vous y arriver cependant. L'essentiel est que la requête interne est une collection, et vous devez lui indiquer comment sélectionner une ligne de cette collection.

2

Je viens de voir le montage - Je pense que c'est ce que vous voulez (vérifier ma syntaxe, bien):

from yy in Tags_Lookups 
join xx in Tags_Lookups on yy.Tag_ID Equals xx.Tag_ID 
where xx.Game_ID == new Guid("4962d645-711c-4db8-a7ce-ae9b36dd730c") 
select yy 

que vous obtiendrez une valeur Tags_Lookups pour chaque game_id correspondant. Vous pouvez envelopper le tout entre parenthèses et ajouter ".Distinct" au cas où vous pourriez avoir plusieurs hits.

+0

Pour le pire, je ne peux pas vous confirmer tous les deux comme la réponse. –

Questions connexes