2010-08-18 2 views
0

Moi encore avec une question stupide/scénario j'ai besoin de conseils sur.LINQ Inscription nécessaire?

Je suit que retire le contenu d'une colonne:

return getappropriateuserfield.tblAutoComplete 
        .Where(p => p.MemberId == memberid && p.ACItem == acitem) 
        .Select(p => p.ACColumn) 
        .Distinct() 
        .ToArray(); 

En fonction de ce résultat, je voudrais prendre le résultat de ACColumn, allez à tblPreferences, regarder vers le bas NomColonne, et si elle correspond à une entrée là-bas, retirer l'alias (présent dans tblPreferences)

Ainsi, par exemple, nous avons tblAutoComplete:

MemberID ACItem ACColumn 
     1  2  UUF1 

tblPreferences regards comme

MemberID ColumnName Alias 
     1  UUF1 Category 

Si les bâtons utilisateur dans « 2 » comme le ACItem, le premier résultat partiel serait « UUF1 » - le LINQ fait au-dessus de cela.

Comment est-ce que je modifie le linq pour que la deuxième partie ait lieu, c.-à-d. prend l'UUF1, regarde dans tblPreferences, vérifie ColumnName, voit le résultat correspond donc le résultat final est l'alias, "Catégorie"

Dois-je faire cela en 2 parties ou puis-je le faire en une seule requête, potentiellement en utilisant une jointure?

Excuses pour l'épaisseur.

Répondre

1

On dirait une jointure pour moi, ce qui est probablement le plus facilement exprimé par une expression de requête:

var query = from ac in foo.tblAutoComplete 
      where ac.MemberId == memberid && ac.ACItem == acitem 
      join pref in foo.tblPreferences.Where(x => x.MemberId == memberid) 
       on ac.ACColumn equals pref.ColumnName 
      select pref.Category; 

Notez que j'ai retiré l'appel Distinct() ici, ce qui signifie que vous pouvez obtenir des répétitions. Vous pouvez mettre Distinct() sur la sortie, bien sûr.

Le résultat de sera IQueryable<string> (en supposant que la catégorie est une chaîne). Si vous avez besoin de plus de bits, vous pouvez utiliser un type anonyme.

EDIT: J'ai modifié la requête afin qu'elle dispose d'une clause "where" supplémentaire lors de la récupération des préférences. Cela devrait être équivalent à l'ajout de MemberId à la jointure.

+0

Oui à la jointure sur memberId aussi bien ... probablement pour le meilleur. –

+0

@ Ricardo: Edité. Ce n'est pas dans la jointure, mais dans une clause supplémentaire. –

Questions connexes