2009-05-18 6 views

答えて

2

答えはもっと簡単でした!

私の親友は私に、これは非常に簡単だと言いました!このサンプルを見てください!

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

ご注意:一部列挙型の名前の後BYTE ...私が探していたトリックがあります!しかし、みんな私のためにおかげです!

+0

あなたのお時間をありがとう、皆さん! – BerggreenDK

2

LUMQオブジェクトでは、列挙型を持つプロパティを持つことができます。あなたはキャストする必要はありませんこのように。

正しい列挙型を持つようにプロパティを変更するだけで、キャストについてもう気にする必要はありません。これはLINQtoSQLデザイナーで行うことができます。プロパティを右クリックし、[プロパティ]を選択し、Visual Studioの[プロパティ]ウィンドウで適切なタイプを設定します。

+0

いいえ、私は5から20までの異なる値を持っていないので、しばしばtinyintです。 – BerggreenDK

+0

その場合は、実際に型をenum型に変更するだけです。 LINQtoSQLはこれを正しく処理します。 –

+0

私の頑固な質問のための恩赦は、どこのタイプを変更するのですか? – BerggreenDK

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

タイプ:SQLは、LINQツー通常、直接整数マップと正確な文字列(名前)のマップを処理する

+0

いいえ、まだありませんが、変数を型キャストするだけのコードがたくさんあるようです。どのような方法でこの打撃のパフォーマンスですか、またはそのトリックを行うための最良の一般的な方法ですか? 私は "単純な"(バイト)置換、列挙型の何かの構文について何かを望んでいたのですか?私が推測することはできません... – BerggreenDK

+0

これはほんの数行、実際には4の例のコードを追加しました;) – TheVillageIdiot

+0

私は混乱しています...それはどのようにキャスティングより簡単ですか?それはボックス/ unboxを導入して以来、確かにそれほど効率が悪いです... –

1

System.Byte(注を: 大文字と小文字を区別)。意味:あなたの列挙をどこかに書いて、デザイナーでプロパティタイプを完全修飾列挙名:Some.Namespace.MyEnumに設定します。それは通常動作するはずです。非自明なマッピングのために

(たとえば、列が混在する場合の値を持つvarchar型である、または「進行中」のようなものは、[スペースに注意]ここで)、あなたはint/varcharとして保存性を残しているだろう(etc)を作成し、手動でマップします。 (ない

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

唯一の問題は、LINQクエリのみストレージプロパティに対して動作するということです。私は通常、民間としてそれをマークし、それをFooStorage名前を付けて、部分クラスにマッピングプロパティを追加することにより、これを行います特注品)。

+0

私のorignalの問題は、私が多くの列挙型を持っていることですが、私がこれを好きなときに: oTabel.State = someEnum.SomeState; 私はそれを書かなければなりません: oTabel.State =(byte)someEnum.SomeState; 毎回...私は "SomeEnum"をデフォルト(BYTE)にキャストしますか? – BerggreenDK

+0

なぜあなたはデザイナーを介してStateをSomeEnumとして扱うようにシステムに指示しないのですか?ただし、暗黙の変換演算子を列挙型に追加することはできません(暗黙の変換を常に含む0は除く)。 –

関連する問題