如何在实体框架方法语法中应用 SQL 'in' 关键字?

use*_*672 4 sql linq entity-framework

如何in在实体框架方法语法中应用 SQL 关键字?

例如,如果我想在实体框架中编写查询

select roleName from Roles where rold_id in (select role_id from UserRoles where user_id = 1);
Run Code Online (Sandbox Code Playgroud)

那么,如何在实体框架方法语法中应用它呢?

Pho*_*cUK 5

内部查询将单独完成:

var inner = UserRoles.Where(r => r.user_id == 1)
                     .Select(r => r.role_id);
Run Code Online (Sandbox Code Playgroud)

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

var roleNames = Roles.Where(r => inner.Contains(r.role_id))
                     .Select(r => r.roleName);
Run Code Online (Sandbox Code Playgroud)

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

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

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);
Run Code Online (Sandbox Code Playgroud)

简而言之,它更像是“A 组包含 B”,而不是“B 位于 A 组中”。