实体框架中的lambda表达式,包括关系

时间:2013-12-20 21:17:59

标签: c# entity-framework lambda

我试图找到一个用户的所有朋友让我们想象两个表

用户(UserID,名称) 友谊(ID,的CreatorID,FriendID,接受) CreatorID和FriendID是Users表的外键

下面的查询应该返回User with UserID = 1的所有“Friends”用户; 但它返回别的东西

Int64 userID =1; 
ctx.Users.Where(x => x.FriendShips.All(y => y.Accepted == true && y.CreatorID == userID)).ToList();

如果有人可以告诉我查询应该使用lambda表达式,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

尝试翻转查询

ctx.Friendships.Where(y=>y.CreatorID==userID && y.Accepted==true).Select(y=>y.User).Distinct();

如果FriendShip有很多用户,则查询将是

ctx.Friendships.Where(y=>y.CreatorID==userID && y.Accepted==true).SelectMany(y=>y.Users).Distinct();

答案 1 :(得分:0)

您的查询会返回所有朋友具有特定ID的用户。我不认为这是你的意图。相反,您希望任何朋友具有特定ID的用户(并且可能还有其他朋友)。