[英]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.