2013-07-05 38 views
1

我試圖在數據庫中將enum另存爲逗號分隔列表。將枚舉存儲爲以逗號分隔的列表

我知道我可以做這樣的事情實際存儲的逗號分隔列表:

part.MyProperty = new[] {"foo", "bar"}; 

和DB將有一個入口「富,酒吧」。

我不知道該怎麼辦是如何存儲的enum,如:

public enum Choices { Choice1, Choice2, Choice3 } 

我猜我不得不使用ParseToString使用enum值,但我不知道怎麼做。

這似乎並不正確:

part.MyProperty = new[] return from name in Enum.GetNames(typeof(T)) 
    let enumValue = Convert.ToString((T)Enum.Parse(typeof(T), name, true)) 

有什麼想法?

+0

請注意在一列中存儲多個值違反[第一正常形式](https://en.wikipedia.org/wiki/First_normal_form)。 –

回答

4

part.MyProperty = Enum.GetNames(typeof(Choices));怎麼了?

爲了得到一個逗號分隔的列表,使用String.Join

string csvEnums = string.Join(",", Enum.GetNames(typeof(Choices))); 
+0

哪裏是被調用的字符串 - 對不起,有點n00b – REMESQ

+0

@REMESQ:對不起,我不明白你的問題。我必須承認,我甚至不知道你爲什麼使用Linq來獲得這個值,或者你想如何將它存儲在數據庫中。 –

+0

@REMESQ,Enum.GetNames()返回一個字符串集合 – AntLaC

0
String.Join(",", Enum.GetNames(typeof(Choices))); 
0

你也可以建立自己的utitlity方法,它將以更漂亮的語法讓枚舉名稱:

public static TEnum[] GetEnumValues<TEnum>() where TEnum : struct { 
    return (TEnum[])Enum.GetValues(typeof(TEnum)); 
} 

和那麼:

Choices[] choices = GetEnumValues<Choices>(); 

part.MyProperty = GetEnumValues<Choices>().Select(n=>n.ToString()).ToArray();

0
[Flags] 
public enum Choices { 
    Choice1 = 1, 
    Choice2 = 2, 
    Choice3 = 4 
} 

Choices a = Choices.Choice1 | Choices.Choice3; 

Console.WriteLine(a.ToString()); 

輸出:Choice1, Choice3

相關問題