繁体   English   中英

创建一个linq查询,以获取所有在异常表中未引用的元素

[英]Create a linq query that get all elements that are not referenced in an aditonal table

嗨,我必须使用linq创建一个选择查询,并且事情没有按预期进行。这是我要实现的目标:

这是我正在使用实体框架数据库第一个模型的数据库图: 在此处输入图片说明

这是我到目前为止的内容:

  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时返回零个元素。

//选择所有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();

效率不是特别高,但是如果您只有几条记录,则应该会有效:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM