开发者

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜