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

时间:2015-08-02 16:01:25

标签: 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方法语法中应用它?

1 个答案:

答案 0 :(得分:3)

内部查询将单独完成:

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);

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

编辑:只是为了完整性,这是一个单行版本:

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'。