web-dev-qa-db-fra.com

expression lambda joindre plusieurs tables avec les clauses select et where

J'ai trois tables plusieurs relations entre plusieurs j'ai rejoint la table trois et sélectionnez la valeur que je veux mais maintenant je dois sélectionner une ligne à partir du résultat de la requête par où en spécifiant l'id ceci est ma table trois 

Et voici la requête utilisant l'expression LINQ lambda:

DataBaseContext db = new DataBaseContext();

public ActionResult Index()
{

    var UserInRole = db.UserProfiles.
        Join(db.UsersInRoles, u => u.UserId, uir => uir.UserId,
        (u, uir) => new { u, uir }).
        Join(db.Roles, r => r.uir.RoleId, ro => ro.RoleId, (r, ro) => new { r, ro })
        .Select(m => new AddUserToRole
        {
            UserName = m.r.u.UserName,
            RoleName = m.ro.RoleName
        });

    return View(UserInRole.ToList());
}

le résultat sera comme ça en utilisant sql requête

sql requête

select * 
from UserProfile u join webpages_UsersInRoles uir on u.UserId = uir.UserId 
                   join webpages_Roles r on uir.RoleId = r.RoleId 

résultat de la requête sql

maintenant, j'utilise anther sql requête pour filtrer le résultat des aperçus sql requête par où et définir la condition à where u.UserId = 1 pour ne me rendre que l'utilisateur avec l'identifiant 1 comme ça

select * 
from UserProfile u join webpages_UsersInRoles uir on u.UserId = uir.UserId 
                   join webpages_Roles r on uir.RoleId = r.RoleId 
where u.UserId = 1

et le résultat de cette requête sql

alors, comment puis-je ajouter le où clause à mon expression lambda pour obtenir le même résultat que le résultat de la requête sql et merci pour toute aide?

22
Fadi

Si je comprends bien vos questions, il vous suffit d'ajouter le .Where (m => m.r.u.UserId == 1):

    var UserInRole = db.UserProfiles.
        Join(db.UsersInRoles, u => u.UserId, uir => uir.UserId,
        (u, uir) => new { u, uir }).
        Join(db.Roles, r => r.uir.RoleId, ro => ro.RoleId, (r, ro) => new { r, ro })
        .Where(m => m.r.u.UserId == 1)
        .Select (m => new AddUserToRole
        {
            UserName = m.r.u.UserName,
            RoleName = m.ro.RoleName
        });

J'espère que ça t'as aidé.

30
Radu Pascal

Je cherchais quelque chose et j'ai trouvé ce post. Je poste ce code qui gère des relations plusieurs à plusieurs au cas où quelqu'un en aurait besoin.

    var UserInRole = db.UsersInRoles.Include(u => u.UserProfile).Include(u => u.Roles)
    .Select (m => new 
    {
        UserName = u.UserProfile.UserName,
        RoleName = u.Roles.RoleName
    });
2
Wilfredo