2013-03-21 58 views
0

我試圖獲得User誰是FacebookFriend以及當前用戶還沒有跟隨誰的列表(UserFollower)。這是我正在嘗試使用的查詢,但我仍然獲取當前用戶已經關注的用戶。不知道下一步該怎麼做。在實體框架中比較兩個具有多個條件的列表

var fb = db.Members 
     .Include(i => i.User) 
      .Where(x => db.FacebookFriends.Where(y => y.UserID == CurrentUserID) 
       .Select(f => f.FacebookID) 
       .Contains(x.ProviderUserId) 
       && !db.UserFollowers 
       .Select(f => f.FollowerID) 
       .Contains(x.UserID) 
      ).Take(6).ToList(); 

FacebookID相同ProviderUserId FollowerIDUserID

這裏的模型。

public class FacebookFriend 
{ 
    public int ID { get; set; } 
    public int UserID { get; set; } 
    public string FacebookID { set; get; } 
    public string Name { set; get; } 

    public User User { get; set; } 
} 

public class UserFollower 
{ 
    public int ID { get; set; } 
    public int UserID { get; set; } 
    public int FollowerID { get; set; } 
    [ForeignKey("UserID")] 
    public User User { get; set; } 
    [ForeignKey("FollowerID")] 
    public User Follower { get; set; } 
} 

Member

[Table("webpages_OAuthMembership")] 
public class OAuthMembership 
{ 
    [Key, Column(Order = 0), StringLength(30)] 
    public string Provider { get; set; } 

    [Key, Column(Order = 1), StringLength(100)] 
    public string ProviderUserId { get; set; } 

    public int UserID { get; set; } 

    //public User User { get; set; } 
    [Column("UserID"), InverseProperty("OAuthMemberships")] 
    public User User { get; set; } 
} 

回答

0

它看起來像你的代碼應該工作,但或許爲清楚起見,可以使用查詢語法重組:

var fb = 
    (from m in db.Members 
    let friendIds = 
     from ff db.FacebookFriends 
     where ff.UserID == CurrentUserID 
     select ff.FacebookId 
    let followerIds = 
     from uf db.UserFollowers 
     select uf.FollowerID 
    where friendIds.Contains(m.ProviderUserId) && !followerIds.Contains(m.UserID) 
    select m) 
    .Take(6) 
    .ToList(); 
+0

遺憾的是我有很多的閱讀查詢語法困難。 – 2013-03-21 20:19:48