簡體   English   中英

用兩個外鍵聯接兩個表

[英]join two table with two foreign Key

我有一個包含用戶數據的表

Users(userID, name , email ,......)

我還有另一個包含以下內容的表:

Userfriends(UserFriendID,Fk_UserSendReqID,FK_UserRecieveReqID,IsAccepted,....)

在UserFriends表中,有兩個外鍵將這個表與users表連接起來,我想用linq編寫查詢,該查詢選擇userId=2的用戶的朋友,但是我寫了這個查詢,但這是錯誤的

 var n = from u in DataContext.Context.Users
                join uf in DataContext.Context.UsersFriends
                on u.UserID equals uf.UserSendReqID
                join uf2 in DataContext.Context.UsersFriends
                on u.UserID equals uf2.UserRecieveReqID
                where (uf.UserSendReqID == 2|| uf.UserRecieveReqID == 2)
                && uf.IsAccepted == true
                select new
                {
                    name = u.FirstName + " " + u.LastName
                };

由於Users表有2個外鍵,因此您必須加入Users表而不是UsersFriends

var userID = 2;
var n = from u in DataContext.Context.Users
            join uf in DataContext.Context.UsersFriends
            on u.UserID equals uf.UserSendReqID
            join u in DataContext.Context.Users
            on u2.UserID equals uf.UserRecieveReqID
            where (uf.UserSendReqID == userID || uf.UserRecieveReqID == userID)
            && uf.IsAccepted == true
            select new
            {
                //if UserSendReqID == userID, then select for u, else u2
                name = (uf.UserSendReqID == userID)
                             ? (u.FirstName + " " + u.LastName)
                             : (u2.FirstName + " " + u2.LastName)
            };
var n = DataContext.Context.Users
                   .Where(u=>DataContext.Context.UsersFriends
                            .Where(uf=>(uf.UserSendReqID == 2 ||
                                       uf.UserReceiveReqID == 2) && uf.IsAccepted)
                            .Any(uf=>uf.UserFriendID == u.userID))
                   .Select(u=> new {
                                 Name = u.FirstName + " " + u.LastName                                     
                               });

或使用Join

var n = DataContext.Context.Users
                   .Join(DataContext.Context.UsersFriends
                                    .Where(uf=>(uf.UserSendReqID == 2 ||
                                       uf.UserReceiveReqID == 2) && uf.IsAccepted),
                         x=>x.userID, x=>x.UserFriendID, (x,y)=>x)
                   .Select(u=> new {
                                 Name = u.FirstName + " " + u.LastName                                     
                               });

表達式查詢:

var n = from u in DataContext.Context.Users
        join uf in DataContext.Context.UsersFriends on u.userID equals uf.UserFriendID
        where (uf.UserSendReqID == 2 || uf.UserReceiveReqID == 2) && uf.IsAccepted
        select new {
                 Name = u.FirstName + " " + u.LastName
               };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM