簡體   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