2009-05-18 78 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,并在部分类添加映射属性来完成这个定制财产)。

相关问题