c# - 如何在多个连接场景中显示枚举值?
问题描述
在 .net 核心项目和 postgresql db 中,我加入了 3 个表。我正在尝试在此连接中获取枚举值。我的加入看起来像
[HttpGet]
public IActionResult GetVMs()
{
var model =
from vm in _context.VirtualMachines
join project in _context.Projects on vm.ProjectId equals project.Id
join hypervisor in _context.Hypervisors on vm.HypervisorId equals
hypervisor.HypervisorId
join managment in _context.Managements on vm.ManagementId equals managment.Id
select new
{
Name = vm.Name,
IpAddress = vm.IpAddress,
DiskSize = vm.DiskSize,
Cpu = vm.CPU,
Ram = vm.Ram,
ImageUrl = vm.ImageUrl,
Role = vm.Role,
Status = vm.Status,
Project = project.Name,
Hypervisor = hypervisor.Name,
Gateway = managment.Gateway,
Netmask = managment.Netmask
};
return Ok(model);
}
我要回到邮递员
{
"name":"Abstergo",
"ipAddress":"192.168.0.1",
"diskSize":25,
"cpu":16,
"ram":100,
"imageUrl":"www.google.com",
"role":1,
"status":0,
"hypervisorId":1,
"projectId":11,
"managementId":8
}
如何显示角色和状态枚举值?
解决方案
您在 Postman 回复中看到的“角色”和“状态”输出
"role":1,
"status":0,
是枚举值,就像默认情况下为 int 的基础枚举类型一样。
当您声明一个枚举(例如)时:
enum Status
{
Online,
Offline
}
您声明为“在线”或“离线”的枚举值在运行时将被视为整数值。如果要返回枚举的字符串表示形式,则应在枚举值上调用 ToString() 函数。
在您的专用示例中,我们没有关于值如何存储在数据库中的任何信息(坚持上面的示例:作为“0”、“1”还是“在线”、“离线”?),我们错过了这些信息它们在运行时的类型:字符串、整数、枚举?
因此请执行以下操作: 1. 检查它们在数据库中的存储方式 2. 找出它们在运行时的类型
如果它们在运行时具有枚举类型,您可以在响应中存储相应的字符串值。
如果它们在运行时不是枚举类型,则应首先将它们转换为相应的枚举类型,然后在响应中返回字符串值。
推荐阅读
- python - 如何使用消息框在 tkinter 中显示用户的输入?
- python - 从字符串中删除每隔一个逗号(python)
- vue.js - vue.js 有条件地导入 mixin
- c - 将 uint16_t 转换为 unsigned int
- linux - 如何将我的程序的菜单栏注册到 KDE Plasma 的全局菜单小部件?
- jquery - Kendo Grid MVC 内联编辑基于其他下拉列表自动选择下拉列表值
- python - 仅使用 cmd 安装 Python 并自动添加到路径
- settings - 反应本国/地区
- python - 条形图轴标签字体大小和间距
- java - 在 JSP 中的 <% %> 代码片段中添加链接