2010-12-10 70 views
1

我有PM收件箱和2個表:用戶和管理員。哪些加入LINQ?

我有這個疑問:

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

但我只能從用戶發件人的所有項目經理。

哪種加入我必須在這裏添加pm.Sender == user.UserID或pm.Sender == admin.AdminID?

回答

4

從邏輯上講,這是這樣的:

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(); 

或者你可以只是做了它一個交叉聯接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();