首页 新闻 会员 周边 捐助

如何用efcore 连表获取用户名?

0
[已解决问题] 解决于 2024-08-07 10:48

用户表:userid,name
角色表:roleid,rolename,createrid(创建人id),updateid
如何用ef获取某个角色的创建人的name?

public class User
{
public int UserId { get; set; }
public string Name { get; set; }
}

public class Role
{
public int RoleId { get; set; }
public string RoleName { get; set; }
public int CreaterId { get; set; }
public User Creater { get; set; }
public int Updateid{ get; set; }
}

await _context.Set<Role>().Include(r => r.User).ToListAsync() 通过这句代码可以根据CreaterId获取到创建人的name,请问怎么根据 Updateid获取到修改人的name呢?

ef
天亦玄的主页 天亦玄 | 初学一级 | 园豆:31
提问于:2023-04-06 20:38
< >
分享
最佳答案
-1

假设你已经建立了以下实体类来表示你的数据库中的用户表和角色表:

csharp

public class User
{
public int UserId { get; set; }
public string Name { get; set; }
}

public class Role
{
public int RoleId { get; set; }
public string RoleName { get; set; }
public int CreaterId { get; set; }
public User Creater { get; set; }
}
其中 Role.Creater 属性表示了角色创建者对应的用户实体。

现在,你想要查询某个角色的创建者的名字,可以使用以下代码:

csharp

var roleName = "admin";
var creatorName = await dbContext.Roles
.Where(r => r.RoleName == roleName)
.Select(r => r.Creater.Name)
.FirstOrDefaultAsync();
这段代码首先查询了角色表中 RoleName 列等于 "admin" 的行,然后使用 Select 投影出了 Creater 导航属性对应的用户实体的 Name 属性,最后使用 FirstOrDefaultAsync 方法获取第一个匹配的结果。如果没有匹配结果,则返回 null。

这里使用了 FirstOrDefaultAsync 方法而不是 SingleOrDefaultAsync 方法,是因为 SingleOrDefaultAsync 方法在结果集为空或存在多个匹配结果时都会抛出异常。如果你确定结果集中只会存在一个匹配结果,可以使用 SingleOrDefaultAsync 方法。

奖励园豆:5
Technologyforgood | 大侠五级 |园豆:7535 | 2023-04-07 21:52

你的回答全部都是用AI答的

天道茜 | 园豆:241 (菜鸟二级) | 2023-04-10 16:25

你这明显不对啊,我是要获取角色表中得创建人的用户名啊

天亦玄 | 园豆:31 (初学一级) | 2023-04-15 21:59
其他回答(2)
0

联查不就好了吗

陌离~ | 园豆:61 (初学一级) | 2023-04-06 22:31

我知道联查,关键是代码怎么写啊

支持(0) 反对(0) 天亦玄 | 园豆:31 (初学一级) | 2023-04-06 23:23
0
(from a in users
join b in roles on a.userid = b.createrid
where b.rolename = ?
select a.name).FirstOrDefault()
复制粘贴机器人 | 园豆:720 (小虾三级) | 2023-04-07 10:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册