2014-04-07 21 views
19

Ho tre tabelle rapporto molti a molti ho unito la tabella tre e selezionare il valore che voglio ma ora ho bisogno di selezionare una riga dal risultato della query da dove specificando il id questo è il mio tavolo a tre espressione lambda join più tabelle con select e where clausola

E questa è la query utilizzando un'espressione 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()); 
} 

il risultato sarà come quello query utilizzando sql

sql interrogazione

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

risultato della query sql

Ora uso antere sql query per filtrare il risultato di anteprime sql query dove e impostare la condizione per where u.UserId = 1 solo a restituirmi l'utente con l'id 1 come quello

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 

e il risultato di questa sql interrogazione

così come posso aggiungere il cui clause alla mia espressione lambda me per dare lo stesso risultato come il risultato della query sql e grazie per qualsiasi aiuto

+0

riferimento gentile questo http://stackoverflow.com/questions/1524813/convert-this-linq-expression-into-lambda – Ramselvaraj

risposta

20

Se ho capito bene le vostre domande, tutto quello che dovete fare è aggiungere il .Dove (m => mruUserId == 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 
     }); 

Speranza che aiuta.

+0

in questa parte 'u => u.UserId, UIR => uir.UserId' ** u.UserId ** significa db.userProfiles.UserId? – Ashkan

+1

sì, sì: https://msdn.microsoft.com/en-us/library/bb534644(v=vs.110).aspx –

1

Stavo cercando qualcosa e ho trovato questo post. Inserisco questo codice che gestisce le relazioni molti-a-molti nel caso qualcuno ne abbia bisogno.

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