您好我必须使用linq创建一个选择查询,事情并没有像我预期的那样。这就是我想要实现的目标:
这是我的数据库图我正在使用Entity Framework数据库的第一个模型:
这是我到目前为止所做的:
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时,我的查询似乎返回零元素。
答案 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();