[英]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];
枚举默认存储为整数。
您可以向数据库表中添加单独的varchar
或nvarchar
字段以保存枚举的描述,并使用以下内容填充它:
string selectedEnumDescription = Enum.GetName(typeof(DeliveryStatusEnum), Delivery.Status)
确切的实现取决于您保存记录的方式,以及实际属性和枚举名称。
然后,您只需在SQL查询中选择description列即可。
或者您可以将实际的枚举值和描述存储在单独的表中并进行连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.