Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在实体框架中比较两个具有多个条件的列表_C#_Linq To Entities_Entity Framework 5 - Fatal编程技术网

C# 在实体框架中比较两个具有多个条件的列表

C# 在实体框架中比较两个具有多个条件的列表,c#,linq-to-entities,entity-framework-5,C#,Linq To Entities,Entity Framework 5,我正在尝试获取用户的列表,这些用户是facebook好友,并且当前用户尚未跟踪他们(UserFollower)。这是我试图使用的查询,但我仍然得到当前用户已经在跟踪的用户。不知道下一步该怎么办 var fb = db.Members .Include(i => i.User) .Where(x => db.FacebookFriends.Where(y => y.UserID == CurrentUserID)

我正在尝试获取
用户
的列表,这些用户是
facebook好友
,并且当前用户尚未跟踪他们(
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();
facebook id
ProviderUserId
FollowerID
是一个
UserID

这是模型

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; }
}
成员

[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; }
}
看起来您的代码应该可以工作,但为了清晰起见,可能可以使用查询语法对其进行重新构造:

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();