2010-01-29 5 views
0

J'ai une base de données contenant des utilisateurs et des rôles. La table Users fait référence aux rôles de la table car chaque utilisateur est lié à un rôle (un et un seul). Lorsque j'utilise linq pour récupérer les utilisateurs, le champ "role" apparaît dans une grille de données sous la forme d'un entier (qui est la clé primaire de la table Roles). Cependant, j'aimerais remplacer le champ Rôle de l'utilisateur par le champ Nom réel de la table Rôle. Une idée sur la façon de le faire?Linq remplacer champ pour une sous-requête

Le code du datacontext est maintenant celui par défaut, quelle requête linq dois-je utiliser pour obtenir ce dont j'ai besoin?

public IQueryable<Usuarios> GetUsuarios() 
{ 
     return this.ObjectContext.Usuarios; 
} 
+0

Si vous utilisez Entity Framework/LINQ à tout, marquer comme tel. –

Répondre

1

La façon canonique de le faire serait d'avoir un modèle spécifique à la vue de votre DataGrid et utiliser LINQ pour sélectionner dans cette modèle spécifique à la vue. Mon exemple suppose LINQ to SQL.

public IEnumerable<UserWithRoles> GetUsersWithRoles() 
{ 
    return this.ObjectContext 
       .Users 
       .Select(u => new UserWithRole { Name = u.Name, ..., Role = u.Roles.First().Name }); 
} 
+0

Juste une autre question liée à ceci. Si j'utilise cette solution, puis-je toujours utiliser la fonctionnalité maître/détail? Je veux dire, si j'utilise SelectedItem sur la grille pour définir les contrôles de détail, utilisera-t-il l'User ou UserWithRoles? Et si c'est le dernier, comment puis-je revenir à l'utilisateur d'origine? Merci! – brafales

+0

Je pense que vous avez juste besoin d'identifier la méthode correcte sur votre source de données qui retournerait un modèle de vue spécifique au détail (ou l'objet métier réel s'ils sont identiques). Notez que vous devez inclure l'ID (vraisemblablement) dans votre modèle de vue maître qui correspond à l'élément de détails correct à récupérer. – tvanfosson

0

Faites ceci au début lié les rôles aux utilisateurs:

return this.ObjectContext.Usuarios.Include("Roles"); 
Questions connexes