C# 获取相关实体上具有条件的实体

C# 获取相关实体上具有条件的实体,c#,entity-framework,where-clause,C#,Entity Framework,Where Clause,我有一个实体User,其属性List具有多对多关系。这很有效。现在,我想得到用户,他们不在某个特定用户的列表中,并且他们有一个包含我的研究的特定名称 因此,我这样做: List<User> users = db.User .Where(user => user.Name.Contains(research) .Where(user => user.UserId != UserConnected.UserId) .ToList(); 经过多次尝试,我不知道如何做到这一点。

我有一个实体
User
,其属性
List
具有多对多关系。这很有效。现在,我想得到
用户
,他们不在某个特定用户的
列表
中,并且他们有一个包含我的研究的特定名称

因此,我这样做:

List<User> users = db.User
.Where(user => user.Name.Contains(research)
.Where(user => user.UserId != UserConnected.UserId)
.ToList();

经过多次尝试,我不知道如何做到这一点。我想知道我是否真的了解这是如何工作的。

对于EF,包含的内容对这类问题很有效。这一切都是关于EF能够将什么转换成SQL。尝试:

var friendIds = userConnected.Friends.Select(f=>f.UserId).ToList();
List<User> users = db.User
  .Where(user => user.Name.Contains(research)
  .Where(user => user.UserId != UserConnected.UserId)
  .Where(user => !friendIds.Contains(user.UserId))
.ToList();
var-friendIds=userConnected.Friends.Select(f=>f.UserId.ToList();
列表用户=db.User
.Where(user=>user.Name.Contains(研究)
.Where(user=>user.UserId!=UserConnected.UserId)
.Where(user=>!friendIds.Contains(user.UserId))
.ToList();

对于EF,Contains对于这类问题非常有效。这是EF能够转化为SQL的全部内容。请尝试:

var friendIds = userConnected.Friends.Select(f=>f.UserId).ToList();
List<User> users = db.User
  .Where(user => user.Name.Contains(research)
  .Where(user => user.UserId != UserConnected.UserId)
  .Where(user => !friendIds.Contains(user.UserId))
.ToList();
var-friendIds=userConnected.Friends.Select(f=>f.UserId.ToList();
列表用户=db.User
.Where(user=>user.Name.Contains(研究)
.Where(user=>user.UserId!=UserConnected.UserId)
.Where(user=>!friendIds.Contains(user.UserId))
.ToList();

对于EF,Contains对于这类问题非常有效。这是EF能够转化为SQL的全部内容。请尝试:

var friendIds = userConnected.Friends.Select(f=>f.UserId).ToList();
List<User> users = db.User
  .Where(user => user.Name.Contains(research)
  .Where(user => user.UserId != UserConnected.UserId)
  .Where(user => !friendIds.Contains(user.UserId))
.ToList();
var-friendIds=userConnected.Friends.Select(f=>f.UserId.ToList();
列表用户=db.User
.Where(user=>user.Name.Contains(研究)
.Where(user=>user.UserId!=UserConnected.UserId)
.Where(user=>!friendIds.Contains(user.UserId))
.ToList();

对于EF,Contains对于这类问题非常有效。这是EF能够转化为SQL的全部内容。请尝试:

var friendIds = userConnected.Friends.Select(f=>f.UserId).ToList();
List<User> users = db.User
  .Where(user => user.Name.Contains(research)
  .Where(user => user.UserId != UserConnected.UserId)
  .Where(user => !friendIds.Contains(user.UserId))
.ToList();
var-friendIds=userConnected.Friends.Select(f=>f.UserId.ToList();
列表用户=db.User
.Where(user=>user.Name.Contains(研究)
.Where(user=>user.UserId!=UserConnected.UserId)
.Where(user=>!friendIds.Contains(user.UserId))
.ToList();

有什么问题吗?你出错了还是没有得到你想要的数据?我没有好办法。因为我的数据库没有结果匹配。我会尽快检查@Peter的答案。有什么问题吗?你出错了还是没有得到你想要的数据?我没有好办法。因为我没有result与我的DB匹配。我会尽快检查@Peter的答案。有什么问题吗?你出错了还是没有得到你想要的数据?我没有好办法。因为我的DB没有结果匹配。我会尽快检查@Peter的答案。有什么问题吗?你出错了还是没有得到你想要的数据nt?我没有很好的方法来做这件事。因为我的DB没有结果匹配。我会尽快检查@Peter的答案。这很有效!谢谢!你想要一杯啤酒作为帮助的礼物吗?:p说真的,你能再解释一下吗?因为,当我读到:
.Where(user=>!friendIds.Contains(user.UserId))
在第一次阅读时,我的印象是相反的条件。根据我对您的问题的理解,您需要添加一个条件,以确保返回的用户不在已连接用户的好友列表中。因此,您使用not contains VS contains。这可能有助于理解EF表达式如何转换为SQL。Contains变成了一个IN谓词,像这样
user IN(1,65,74)
所以在你的例子中,你想要
user而不是IN(1,65,74)
这是有效的!谢谢!你想要一杯啤酒作为这个帮助的礼物吗?:p说真的,你能再解释一下吗?因为,当我读到:
.Where(user=>!friendIds.Contains(user.UserId))
在第一次阅读时,我的印象是相反的条件。根据我对您的问题的理解,您需要添加一个条件,以确保返回的用户不在已连接用户的好友列表中。因此,您使用not contains VS contains。这可能有助于理解EF表达式如何转换为SQL。Contains变成了一个IN谓词,像这样
user IN(1,65,74)
所以在你的例子中,你想要
user而不是IN(1,65,74)
这是有效的!谢谢!你想要一杯啤酒作为这个帮助的礼物吗?:p说真的,你能再解释一下吗?因为,当我读到:
.Where(user=>!friendIds.Contains(user.UserId))
在第一次阅读时,我的印象是相反的条件。根据我对您的问题的理解,您需要添加一个条件,以确保返回的用户不在已连接用户的好友列表中。因此,您使用not contains VS contains。这可能有助于理解EF表达式如何转换为SQL。Contains变成了一个IN谓词,像这样
user IN(1,65,74)
所以在你的例子中,你想要
user而不是IN(1,65,74)
这是有效的!谢谢!你想要一杯啤酒作为这个帮助的礼物吗?:p说真的,你能再解释一下吗?因为,当我读到:
.Where(user=>!friendIds.Contains(user.UserId))
在第一次阅读时,我的印象是相反的条件。根据我对您的问题的理解,您需要添加一个条件,以确保返回的用户不在已连接用户的好友列表中。因此,您使用not contains VS contains。这可能有助于理解EF表达式如何转换为SQL。Contains被转换为类似于(1,65,74)中的
user的IN谓词
,因此在您的示例中,希望
user不在(1,65,74)