C# 选择不在实体框架中的

C# 选择不在实体框架中的,c#,sql,entity-framework,C#,Sql,Entity Framework,我试图将下面的SQL代码转换为EF select语句。我几乎已经完成了,除了我被困在如何做一个非实体框架 MS SQL选择 SELECT * from friends as f WHERE (f.id NOT IN (Select friendid from users_friends where userid = 1)) AND (f.lastname LIKE '%b%' OR f.firstname LIKE '%b%' OR f.alias LIKE '%b%') 我的EF选择

我试图将下面的SQL代码转换为EF select语句。我几乎已经完成了,除了我被困在如何做一个非实体框架

MS SQL选择

SELECT * from friends as f
 WHERE (f.id NOT IN (Select friendid from users_friends where userid = 1))
   AND (f.lastname LIKE '%b%' OR f.firstname LIKE '%b%' OR f.alias LIKE '%b%')
我的EF选择不带不在部分

var friends =
    (from f in db.Friends 
     select new FriendModel()
    {
        Id = f.Id,
        Alias = f.Alias,
        CarrierId = f.CarrierId,
        CreatedOn = f.CreatedOn,
        FirstName = f.FirstName,
        LastName = f.LastName,
        Locked = f.Locked,
        PhoneNumber = f.PhoneNumber,
        SteamId = f.SteamId,
        Carrier = new CarrierModel()
        {
            CarrierName = f.Carrier.CarrierName,
            CarrierEmail = f.Carrier.CarrierEmail
        }
    }).Where(
        f => (f.Alias.Contains(query) || f.FirstName.Contains(query) || f.LastName.Contains(query)))
        .OrderBy(f => f.Alias)
        .ToList();

假设用户实体有一个朋友实体集合

   .Where(f => (f.Alias.Contains(query) || f.FirstName.Contains(query) || f.LastName.Contains(query))
            && !context.Users.FirstOrDefault(u=>u.UserId == 1)
            .Friends.Any(uf=>uf.FriendId == f.FriendId))
如果不是,则直接查询UserFriend表

   .Where(f => (f.Alias.Contains(query) || f.FirstName.Contains(query) || f.LastName.Contains(query))
            && !context.UserFriends.Any(uf=>uf.UserId == 1 && uf.FriendId == f.FriendId)

我想这就是你想要的:

var friendIds = db.users_friends.Where(f => f.userid == 1).Select(f => f.friendid);
var friends = db.Friends.Where(f => !friendIds.Contains(f.Id) &&
                                      (f.Alias.Contains(query) ||       
                                      f.FirstName.Contains(query) || 
                                        f.LastName.Contains(query)))
                         .Select(f => new FriendModel() { ... })
                         .OrderBy(f => f.Alias)
                         .ToList();

我很困惑。朋友。任何部分。它在.Friends?上中断,您正在查找userId==1的用户,然后检查该用户对象在该查询中是否没有与“f”具有相同id的朋友。如果数据库设置正确,则用户实体应具有朋友实体的集合。