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