C# 选择不在实体框架中的
我试图将下面的SQL代码转换为EF select语句。我几乎已经完成了,除了我被困在如何做一个非实体框架 MS SQL选择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选择
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的朋友。如果数据库设置正确,则用户实体应具有朋友实体的集合。