2010-12-10 6 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が持つことができます。

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(); 
関連する問題