开发者

Which join in LINQ?

开发者 https://www.devze.com 2023-01-30 11:08 出处:网络
I have PM Inbox and 2 Tables: Users and Admins. I have this query: return (from pm in dc.PrivateMessages

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

精彩评论

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

关注公众号