[英]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.