2010-12-10 68 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();