enumのデフォルトの型変換を行うことは可能ですか?デフォルトの型変換による列挙型ですか?それは可能ですか?
私は状態など多くのためにenumを使用していますが、列挙型をLINQフィールドと直接比較したいのですが、常に型キャストする必要があります。
enumのデフォルトの型変換を行うことは可能ですか?デフォルトの型変換による列挙型ですか?それは可能ですか?
私は状態など多くのためにenumを使用していますが、列挙型をLINQフィールドと直接比較したいのですが、常に型キャストする必要があります。
答えはもっと簡単でした!
私の親友は私に、これは非常に簡単だと言いました!このサンプルを見てください! へ
public enum State:byte
{
EmailNotValidated = 0x00,
EmailValidated = 0x10,
Admin_AcceptPending = 0x40,
Active = 0x80,
Admin_BlockedAccount = 0xff
}
ご注意:一部列挙型の名前の後BYTE ...私が探していたトリックがあります!しかし、みんな私のためにおかげです!
LUMQオブジェクトでは、列挙型を持つプロパティを持つことができます。あなたはキャストする必要はありませんこのように。
正しい列挙型を持つようにプロパティを変更するだけで、キャストについてもう気にする必要はありません。これはLINQtoSQLデザイナーで行うことができます。プロパティを右クリックし、[プロパティ]を選択し、Visual Studioの[プロパティ]ウィンドウで適切なタイプを設定します。
いいえ、私は5から20までの異なる値を持っていないので、しばしばtinyintです。 – BerggreenDK
その場合は、実際に型をenum型に変更するだけです。 LINQtoSQLはこれを正しく処理します。 –
私の頑固な質問のための恩赦は、どこのタイプを変更するのですか? – BerggreenDK
拡張メソッドを試しましたか?
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ツー通常、直接整数マップと正確な文字列(名前)のマップを処理する
いいえ、まだありませんが、変数を型キャストするだけのコードがたくさんあるようです。どのような方法でこの打撃のパフォーマンスですか、またはそのトリックを行うための最良の一般的な方法ですか? 私は "単純な"(バイト)置換、列挙型の何かの構文について何かを望んでいたのですか?私が推測することはできません... – BerggreenDK
これはほんの数行、実際には4の例のコードを追加しました;) – TheVillageIdiot
私は混乱しています...それはどのようにキャスティングより簡単ですか?それはボックス/ unboxを導入して以来、確かにそれほど効率が悪いです... –
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
名前を付けて、部分クラスにマッピングプロパティを追加することにより、これを行います特注品)。
私のorignalの問題は、私が多くの列挙型を持っていることですが、私がこれを好きなときに: oTabel.State = someEnum.SomeState; 私はそれを書かなければなりません: oTabel.State =(byte)someEnum.SomeState; 毎回...私は "SomeEnum"をデフォルト(BYTE)にキャストしますか? – BerggreenDK
なぜあなたはデザイナーを介してStateをSomeEnumとして扱うようにシステムに指示しないのですか?ただし、暗黙の変換演算子を列挙型に追加することはできません(暗黙の変換を常に含む0は除く)。 –
あなたのお時間をありがとう、皆さん! – BerggreenDK