首页 > 解决方案 > 如何在多个连接场景中显示枚举值?

问题描述

在 .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
}

如何显示角色和状态枚举值?

标签: c#linqhttp

解决方案


您在 Postman 回复中看到的“角色”和“状态”输出

    "role":1,
    "status":0,

是枚举值,就像默认情况下为 int 的基础枚举类型一样。

当您声明一个枚举(例如)时:

enum Status
{
    Online,
    Offline
}

您声明为“在线”或“离线”的枚举值在运行时将被视为整数值。如果要返回枚举的字符串表示形式,则应在枚举值上调用 ToString() 函数。

在您的专用示例中,我们没有关于值如何存储在数据库中的任何信息(坚持上面的示例:作为“0”、“1”还是“在线”、“离线”?),我们错过了这些信息它们在运行时的类型:字符串、整数、枚举?

因此请执行以下操作: 1. 检查它们在数据库中的存储方式 2. 找出它们在运行时的类型

如果它们在运行时具有枚举类型,您可以在响应中存储相应的字符串值。

如果它们在运行时不是枚举类型,则应首先将它们转换为相应的枚举类型,然后在响应中返回字符串值。


推荐阅读