sql - 如何在 Entity Framework 方法语法中应用 SQL in 关键字?

标签 sql linq entity-framework

如何在 Entity Framework 方法语法中应用 SQL in 关键字?

例如,如果我想在 Entity Framework 中编写查询

select roleName from Roles where rold_id in (select role_id from UserRoles where user_id = 1);

那么,如何在 Entity Framework 方法语法中应用它?

最佳答案

内部查询将单独完成:

var inner = UserRoles.Where(r => r.user_id == 1)
                     .Select(r => r.role_id);

然后外层会使用内层的.Contains方法。

var roleNames = Roles.Where(r => inner.Contains(r.role_id))
                     .Select(r => r.roleName);

您可以将它们全部合并到一个查询中,但这是最明智的方法。 Entity Framework 使用延迟查询,因此它仍然可以高效地执行此操作。

编辑:为了完整起见,这里有一个单行版本:

var roleNames = Roles.Where(r => UserRoles
                         .Where(ur => ur.user_id == 1)
                         .Select(ur => ur.role_id)
                     .Contains(r.role_id))
                     .Select(r => r.roleName);

简而言之,与其说是“B 在集合 A 中”,不如说是“集合 A 包含 B”。

关于sql - 如何在 Entity Framework 方法语法中应用 SQL in 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31773757/

相关文章:

sql - SQL Server 中的自然连接

c# - 如何按日期时间值对字典进行排序

c# - Entity Framework groupby 子集合

wpf - 如何使用 EntityCollection 对象的 HierarchicalDataTemplate 对 WPF TreeView 进行排序?

c# - Entity Framework 不更新由触发器修改的值

sql - SQL 语法困惑

php - 数据库设计-我应该有很多关于上传图像列的列还是应该将其放入包含很多行的新表中?

mysql - MySQL 查询格式错误

c# - 使用 LINQ 连接 JArray 中的字符串

c# - Entity Framework : Update affecting Object