我的SQL Server数据库Role
,Permission
和RolePermission
中有3个表。
RolePermission
由两列qRole
和qPermission
组成,这两列是其他两个表的外键。
因此,当Entity Framework为其创建模型时,它只创建两个类,并将RolePermission
的虚拟属性添加到每个角色和权限类中。
现在我需要从RolePermission
中选择列,所以我写了这段代码:
var rolePermission = PREntitiy.Roles.Where(r => r.qRole == TxtRole.Text)
.Select(p => p.Permissions);
这样做我可以访问rolePermission
表但是我需要从单个查询中的角色表和rolePermission
中的某些列中检索一些列,就像我们在SQL中的join语句中所做的那样。
换句话说,我需要一个linq查询来访问角色表中的一些列,一些来自rolePermission
,但是我需要在一个linq查询中执行它,就像SQL中的join语句一样。
由于
答案 0 :(得分:21)
您正在寻找.Include()
声明
http://msdn.microsoft.com/en-us/data/jj574232.aspx
var role = PREntitiy.Roles.Include(r=>r.Permission).Where(r => r.qRole == TxtRole.Text)
我没有你的所有课程,因此Permission属性可能不正确。
您可以使用正常的点符号访问每个类的属性:
var x = role.name;
var y = role.Permission.Name;
等
答案 1 :(得分:0)
@BlackICE的建议对我很有帮助。这不完全一样,但是我有一个类似的问题。我有三个表,用户(用户名,密码),角色(角色ID,角色名称)和用户角色(用户名称,角色ID)。最后一个由其他两个的密钥组成。为了获得角色,给定用户名,我必须执行以下操作。我不知道这是否适当/不合适,但对我有用:)。
IQueryable<User> IQUsers = _dbContext.Users.Include(u => u.Roles).Where(u => u.Username == username);
User _user = IQUsers.FirstOrDefault<User>();
Role _role = _user.Roles.FirstOrDefault<Role>();
roleName = _role.RoleName;