Which join in LINQ?
I have PM Inbox and 2 Tables: Users and Admins.
I have this query:
return (from pm in dc.PrivateMessages
join user in dc.Users
on pm.Sender equals user.UserID
selec开发者_如何学Pythont new PMInbox
{
SenderUsername = user.Username
}).ToList();
But there I can only have all PMs from User-Senders.
Which kind of join I must add here to have pm.Sender == user.UserID OR pm.Sender == admin.AdminID?
Logically, that's something like this:
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();
Or you could just make it a cross-join with a where clause:
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();
精彩评论