2011-07-21 1 views
0

私は本質的にlinqクラスを拡張する汎用クラスを持っています。つまり、私はlinqクラスを拡張することはできません、私は別の汎用クラスを持つ必要があることを意味します。C#Linq DBMLクラスラッパー

public LinqCake // Linq Class from DBML 
{ 
    string Name; 
    FrostingType Type; 
} 

public class Cake<T> : LinqCake where T is FrostingType 
{ 
    public bool SomeProperty 
    { 
      get 
      { 
      return LinqCake.Type == FrostingType; 
      } 
    }   

    // I basically want to do something like this, 
    // but I obviously can't because this code isn't valid 
    public Cake (int ID) 
    { 
      this = db.LinqCakes.Where(x=>x.ID = ID).Single(); 
    } 
} 

public void Main() 
{ 
    Cake<Chocolate> ChocolateCake = Cake<Chocolate>(7); 
    Console.WriteLine(ChocolateCake.SomeProperty); 
} 

私は基本的に、ケーキの継承クラスLinqCakeにデータベースからの情報を入力したいと考えています。暗黙のキャストだけでこれを行うことはできますか?

私は何をしようとしているのかの精神をどのように達成しますか?私はこれをやるという2つの方法を考えることができます。 A)プライベートLinqCakeメンバーを追加するB)本質的に、LinqCakeクラスの各プロパティをCakeクラスの重複プロパティに読み込むだけです。

もっと良い解決策があるような気がしますか?

+1

私にはあなたが達成したいものが本当にはっきりしていないかもしれません。おそらくもっとコードが助けになるでしょう – Yahia

+0

Yahiaと合意しました。あなたが与える例では、私はもっとケーキに LinqCakeプロパティとFrostingTypeプロパティを与える傾向があります。その後、LinqCakeやFrostingTypeを別々に参照することができました。あなたのコンストラクタは単純に 'this.LinqCake = db.LinqCakes.Single(x => x.ID = ID);となるでしょう。 –

答えて

0

私はあなたの質問を理解しています。ここでは、LinqCakeのフィールドをCakeのフィールドにマッピングします。 LinqCakeCakeに設定することはできません。これは、そのタイプ階層のように指定されていないためです。

おそらく、AutoMapperのようなツールが役に立ちます。

関連する問題