2012-06-15 1 views
2

나는 facebook과 비슷한 webapp을 구축 중입니다. 내가 만들어 내가 현재 로그인 한 사용자의 친구 게시물을 얻을 수 있도록 여기에 확인EF 쿼리, 무언가를 게시 한 친구로부터 사용자 이름 가져 오기

public User() 
    { 
     this.Friends = new HashSet<Friend>(); 
     this.Friends1 = new HashSet<Friend>(); 
     this.Posts = new HashSet<Post>(); 
    } 

    public int userID { get; set; } 
    public System.Guid user_Unique_ID { get; set; } 
    public string username { get; set; } 
    public string profilePicUrl { get; set; } 

    public virtual ICollection<Friend> Friends { get; set; } 
    public virtual ICollection<Friend> Friends1 { get; set; } 
    public virtual ICollection<Post> Posts { get; set; } 


public partial class Friend 
{ 
    public int friendshipID { get; set; } 
    public int userfrID { get; set; } 
    public int friendID { get; set; } 

    public virtual User User { get; set; } 
    public virtual User User1 { get; set; } 
} 

public partial class Post 
{ 
    public int postID { get; set; } 
    public int userpostID { get; set; } 
    public System.DateTime postedOn { get; set; } 
    public string text { get; set; } 
    public int likes { get; set; } 

    public virtual User User { get; set; } 
} 

내가이 시도 어떤 모델이 (페이스 북에서 비슷한에 "집") 데이터베이스를 조회 할 뷰 모델 : 모든 것이 현재 기록 된 사용자의 사용자 이름, f를에서가 아닌 사용자 이름을 표시 게시,

using (var context = new ASPNETDBEntities()) 
     { 
      MembershipUser x = Membership.GetUser(); 
      User wad = context.Users.Where(u => u.user_Unique_ID == (System.Guid)x.ProviderUserKey).SingleOrDefault(); 
      int id = wad.userID; 
      var allposts = (from u in db.Users 
          join f in db.Friends 
          on u.userID equals f.userfrID 
          where f.userfrID == id 
          join p in db.Posts 
          on f.friendID equals p.userpostID 
          select new HomePosts 
          { 
           friendID = f.friendID, 
           likes = p.likes, 
           postedOn = p.postedOn, 
           postID = p.postID, 
           text = p.text, 
           userfrID = f.userfrID, 
           userID = u.userID, 
           username = u.username, <-- this is the problem 
           userpostID = p.userpostID 
          }).OrderByDescending(u => u.postedOn).ToList(); 
      return View(allposts); 
     } 

문제는 여기

public class HomePosts 
{ 
    public int postID { get; set; } 
    public int userID { get; set; } 
    public int userpostID { get; set; } 
    public string username { get; set; } 
    public string text { get; set; } 
    public System.DateTime postedOn { get; set; } 
    public int likes { get; set; } 
    public int userfrID { get; set; } 
    public int friendID { get; set; } 
} 

및 내 쿼리입니다 그 게시물을 올린 친구. 포스터 (친구)의 사용자 이름이 필요합니다. 제안 사항이 있으십니까?

답변

2

좋아 현재 사용자), 당신이 시도 할 수 있습니다 : 당신의 EF는 설정 인 경우 또는

from f in db.Friends 
join u in db.Users 
on f.friendID equals u.userID 
where f.userfrId = id 
join p in db.Posts        
on f.friendID equals p.userpostID        
select new HomePosts 
{         
    friendID = f.friendID,         
    likes = p.likes,         
    postedOn = p.postedOn,         
    postID = p.postID,         
    text = p.text,         
    userfrID = f.userfrID,         
    userID = u.userID,         
    username = u.username, 
    userpostID = p.userpostID        
} 

가 제대로 당신이 할 수 있습니다 :

var posts = db.Posts.Where(p => p.User.Any(u => u.Friends.Any(f => f.userfrID == id))).Select(p => new HomePosts 
    {         
     // your selections       
    } 

) 
+0

Ty, 첫 번째 답변은 – Milanix

+0

내가 도와 드릴 수있어서 기쁩니다. – fenix2222

0

해서는 안이 부분

join p in db.Posts  
on f.friendID equals p.userpostID 

수 :

join p in db.Posts 
on u.userID equals p.userpostID 

? 다시 루프> 친구 아이디 (- -> 현재 사용자 -> 친구

이 포스트의 사용자 ID에 게시물 테이블을 결합 : 당신은 무엇을 말하는 것처럼

내가 misenterpreting있어하지 않는 한, 그것은 소리

+0

Na, 그걸로 현재 사용자의 게시물을 보여줍니다 – Milanix

관련 문제