2009-05-18 79 views

回答

2

答案是更加簡單!

我的一個好朋友告訴我這很簡單!看看這個例子!

public enum State:byte 
{ 
    EmailNotValidated = 0x00, 
    EmailValidated = 0x10, 
    Admin_AcceptPending = 0x40, 
    Active = 0x80, 
    Admin_BlockedAccount = 0xff 
} 

,請注意:枚舉的名稱後部分BYTE ...有我一直在尋找的伎倆!但是,感謝大家爲我而努力!

2

您應該可以在您的LINQ對象中具有枚舉類型的屬性。這樣你不必投。

所以,只要改變你的屬性,使其具有正確的枚舉類型,你不必擔心再次施放。您可以在LINQtoSQL設計器中執行此操作。只需右鍵單擊某個屬性,選擇「屬性」並在Visual Studio屬性窗口中設置適當的類型。

+0

不,他們通常是tinyint,因爲我沒有超過5到20個不同的值。 – BerggreenDK 2009-05-18 09:14:07

+0

在這種情況下,您應該將其類型更改爲它們實際上的枚舉類型。 LINQtoSQL將正確處理這個問題。 – 2009-05-18 09:18:20

+0

赦免我的問題,但我在哪裏改變他們的類型? – BerggreenDK 2009-05-18 10:33:05

0

您是否嘗試過擴展方法?

public enum MyEnum 
{ 
    First = 1, 
    Second = 2, 
    Third = 3 
} 

public static class Utility 
{ 
    public static string Description(this Enum e) 
    { 
     Type t = e.GetType(); 
     DescriptionAttribute[] desc = 
      (DescriptionAttribute[])(t.GetField(e.ToString()) 
      .GetCustomAttributes(typeof(DescriptionAttribute), false)); 
     return desc.Length > 0 ? desc[0].Description : e.ToString(); 
    } 
    public static byte ToByte(this Enum ai) 
    { 
     object o=Enum.ToObject(ai.GetType(), ai); 
     return Convert.ToByte(o); 
    } 
} 


class Program 
{ 
    static void Main(string[] args) 
    { 
     MyEnum me = MyEnum.Third; 

     Console.WriteLine("Value: {0}\r\nType: {1}" 
     ,me.ToByte(),me.ToByte().GetType().ToString()); 

     Console.ReadLine(); 
    } 
} 

它輸出:

值:3

類型:System.Byte

1

LINQ到SQL通常會處理直接整數地圖和詳細的字符串(名)地圖(注: 區分大小寫)。含義:在某處寫入枚舉,並在設計器中將屬性類型設置爲完全合格的枚舉名稱:Some.Namespace.MyEnum。它通常應該工作。

對於非平凡映射(例如,其中柱是具有混合的情況下的值一個varchar,或之類的東西「進行中」 [注意空格]),你將不得不離開存儲屬性作爲int/varchar (等)並手動映射。

partial class MyType { 
    public MyEnum Foo { 
     get {... mapping logic reading from FooStorage...} 
     set {... mapping logic, updating FooStorage...} 
    } 
} 

唯一的問題是,LINQ查詢將只針對存儲物業工作(不是:我通常將其標記爲私有並將其命名爲FooStorage,並在部分類添加映射屬性來完成這個定製財產)。

相關問題