创建一个linq查询,该查询获取未在附加表中引用的所有元素

时间:2014-11-23 17:06:55

标签: c# entity-framework linq-to-entities

您好我必须使用linq创建一个选择查询,事情并没有像我预期的那样。这就是我想要实现的目标:

这是我的数据库图我正在使用Entity Framework数据库的第一个模型: enter image description here

这是我到目前为止所做的:

  public IEnumerable<FriendModel> GetSuggestedFriends(int userId, int numberOfFriendsToSkip,
        int numberOfFriendsToGet)
    {
           var currentUser = dbContext.AspNetUsers.First(x => x.Id.Equals(userId));

        var friendsList = (from user in dbContext.AspNetUsers
                           from friend in user.Friends1
                           from currentUserFriend in currentUser.Friends1
                           where user.Id != currentUser.Id && user.Id != currentUserFriend.UserFriendId
                           select new FriendModel
                           {
                               AvatarId = user.AvatarId,
                               FirstName = user.FirstName,
                               LastName = user.LastName,
                               UserId = user.Id
                           }).ToList();


        return friendsList;
    }

我想在这里说的是让我的数据库中的所有用户都不是当前用户,并且当前用户没有该用户作为朋友。

谁能告诉我如何实现这一目标?当我的查询返回6时,我的查询似乎返回零元素。

2 个答案:

答案 0 :(得分:1)

//选择id不是当前ID的所有用户,而id不是用户朋友的任何ID

IQueryable<User> users = context.Users;

var results = users.Where(x => x.Id != userId &&
                                           !users.Where(v => v.Id == userId)
                                                 .SelectMany(v => v.Friends.Select(d => d.Id))
                                                 .Any(e => e == x.Id))
                                                 .Select(x=>new
                                                                {
                                                                    //your projection
                                                                })
                               .ToList();

答案 1 :(得分:-2)

不是特别有效但如果你只有一些记录,这应该是有效的:

var friendsList = dbContext.AspNetUsers
                  .AsEnumerable()
                  .Where(u.Id != currentUserId && !u.Friends
                                                     .Select(f=>f.UserFriendId)
                                                     .AsEnumerable()
                                                     .Contains(currentUserId))
                  .ToList();