[英]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.