2010-12-10 3 views
1

J'ai PM Inbox et 2 tables: Utilisateurs et Administrateurs.Qui se joint à LINQ?

Je cette requête:

  return (from pm in dc.PrivateMessages 
        join user in dc.Users 
        on pm.Sender equals user.UserID 
        select new PMInbox 
           { 
            SenderUsername = user.Username 
           }).ToList(); 

Mais je ne peux que tous les PMs de l'utilisateur Expéditeurs.

Quel genre de joint je dois ajouter ici pour avoir pm.Sender == user.UserID OU pm.Sender == admin.AdminID?

Répondre

4

Logiquement, c'est quelque chose comme ceci:

var messageUsers = dc.PrivateMessages.Join(dc.Users, 
              pm => pm.Sender, 
              user => user.UserId, 
              (pm, user) => user); 
var messageAdmins = dc.PrivateMessages.Join(dc.Users, 
              pm => pm.Sender, 
              admin => admin.AdminID, 
              (pm, admin) => admin); 
return messageUsers.Union(messageAdmins) 
        .Select(user => new PMInbox { 
         SenderUsername = user.Username 
        }) 
        .ToList(); 

Ou vous pourriez juste faire une coupe se joindre à une clause where:

return (from pm in dc.PrivateMessages 
     from user in dc.Users 
     where pm.Sender == user.UserID || pm.Sender == user.AdminID 
     select new PMInbox 
     { 
      SenderUsername = user.Username 
     }).ToList();