2010-08-16 5 views
3

Je viens de commencer Entity Framework & LINQ et écrire cette requêteEntity Framework - requête d'écriture en utilisant l'expression lambda

var query = from rp in db.UM_RolePermission 
      where (from ru in db.UM_RoleUser 
      where ru.UM_User.UserID == userId select ru.RoleID).Contains(rp.RoleId) 
      select rp; 

ci-dessus fonctionne très bien et FULLFILL mes besoins, mais je suis en train d'écrire ce même en utilisant l'expression lambda pour comprendre cela aussi.

Je me suis essayé à écrire ceci mais j'ai été incapable de le compléter.

var query1 = db.UM_RolePermission 
      .Where(rp => (from ru in db.UM_RoleUser where ru.UM_User.UserID == userId select ru.RoleID).Contains(rp.RoleId)); 

Quelqu'un peut-il compléter cela?

RelationShip:

UM_RoleUser and UM_User 

Merci

Répondre

2
var query = db.UM_RolePermission 
      .Where(rp => db.UM_RoleUser 
         .Where(ru => ru.UM_User.UserID == userId) 
         .Select(ru => ru.RoleID) 
         .Contains(rp.RoleId)) 
+0

bien choisi, merci –

1

Je vais sauter avant et supposons que vous avez défini une relation entre RolePermission et RoleUser dans plusieurs-à-plusieurs? Cela rendra votre vie beaucoup plus simple.

var query1 = db.UM_RoleUser 
    .Where(ru => ru.UserId == userID) 
    .SelectMany(rp => rp.RolePermissions); 

Bien sûr, cela dépend de la façon dont vous avez configuré vos relations.

+0

Son pas juste, S'il vous plaît d'abord comprendre ma première requête –

+0

Il n'y a pas de relation b/w RolePermission & RoleUser –

+2

Pourquoi ne pas faire un? Cela ressemble certainement à une relation naturelle avec moi d'après ce que vous m'avez dit. –

Questions connexes