繁体   English   中英

如何使用SQL显示字符串枚举值而不是数值

[英]How to display the string Enum values instead of the number value using SQL

我正在尝试显示status Dispatched的所有Deliveries列表。 但是,它只返回status number value而不是实际的string value 我想这是因为我使用Enum来存储我的status values

我希望显示单词Dispatched而不是它在Enum表示的number value

我正在开发ASP.Net MVC,我正在使用VS2013中的query builder

我不知道如何处理这个问题,任何人都可以使用SQL建议一个易于理解的解决方案。

如果需要任何其他代码,请告诉我,并提前感谢您!

这是我想要的查询,但它不起作用:

SELECT Delivery.[Status], 
COUNT(Delivery.DeliveryID) AS Dispatched_Status 
FROM Delivery 
WHERE Delivery.[Status] = 'Dispatched'
GROUP BY Delivery.[Status];

这是可以工作但返回数值的查询。 我这样试了,因为Enum将字符串值存储为数字:

SELECT Delivery.[Status], 
COUNT(Delivery.DeliveryID) AS Dispatched_Status 
FROM Delivery 
WHERE Delivery.[Status] = '1'
GROUP BY Delivery.[Status];

PS我知道status是一个保留字 - 将来会遵循正确的命名约定。

交货表定义

在此输入图像描述

听起来你只需要在DB中添加一个查找表。 就像是

CREATE TABLE [dbo].[StatusLookup](
    [StatusID] [int] NOT NULL,
    [StatusName] [varchar](64) NOT NULL,
    [StatusDescription] [varchar](max),
)

INSERT INTO [dbo].[StatusLookup]([StatusID],[StatusName],[StatusDescription]
VALUES(1, 'Dispatched', 'A dispatched record')
...

请注意,您必须手动执行此操作,并确保使用与枚举匹配的值填充它。

然后你的查询将是

SELECT StatusLookup.[StatusName], 
COUNT(Delivery.DeliveryID) AS Dispatched_Status 
FROM Delivery 
JOIN StatusLookup ON Delivery.Status = StatusLookup.StatusID
WHERE StatusLookup.[StatusName] = 'Dispatched'
GROUP BY StatusLookup.[StatusName];

枚举默认存储为整数。

您可以向数据库表中添加单独的varcharnvarchar字段以保存枚举的描述,并使用以下内容填充它:

string selectedEnumDescription = Enum.GetName(typeof(DeliveryStatusEnum), Delivery.Status)

确切的实现取决于您保存记录的方式,以及实际属性和枚举名称。

然后,您只需在SQL查询中选择description列即可。

或者您可以将实际的枚举值和描述存储在单独的表中并进行连接。

您可以将枚举存储在数据库中作为数字,通常是一个小数字 - 具体类型取决于您的数据库。 当你阅读它 - 你将一个数字转换为enum并使用enum在你的代码中工作。 当您需要显示它时,您可以在该枚举上调用ToString()方法,例如

public enum Foo
{
    A,
    B
}

public class Program
{
    public static void Main()
    {
        Console.WriteLine(Foo.A.ToString()); // Prints    A
    }
}

看它工作

您还可以使用description属性并打印出来,请参阅此处此处的示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM