2009-05-08 6 views
1

私が代わりに、メソッド変数のクラス変数AllThreadsが変数にしたいこのLINQ2SQL:var型のメンバー変数を宣言するにはどうすればよいですか?

public class foo 
    { 

     private void getThread() 
     { 
     var AllThreads = from sc in db.ScreenCycles 
          join s in db.Screens on sc.ScreenID equals s.ScreenID 
          select s; 
     } 
    } 

のようなクラスを持っています。このように...

public class foo 
{ 
    var AllThreads; 
    private void getThread() 
    { 
     AllThreads = from sc in db.ScreenCycles 
          join s in db.Screens on sc.ScreenID equals s.ScreenID 
          select s; 
    } 
} 

どのように私はvar型のクラス変数を宣言できませんでした。

これを達成するにはどうすればよいですか?

+1

「型VAR」のようなものはありませんやるべきことがあるよ。 " –

答えて

1

あなたの元のコードを保持するために、あなたはクラスレベルでvarを使用することはできません。この

public class foo 

    IEnumerable<ScreenCycles> AllThreads; 
    private void getThread() 
    { 
     AllThreads = from sc in db.ScreenCycles 
          join s in db.Screens on sc.ScreenID equals s.ScreenID 
          select s; 
    } 

} 
+0

彼は "ScreenCycles"ではなく "Screens"を選択しているようです。 –

+0

オリジナルのクラスデザインに欠陥があります。あなたは一般的にIEnumerableを返すべきではありませんか? あなたが答えたものが、質問された質問に正当なものであることは確かですが、最終的にアドバイスは根本的に欠陥があります。 – Serapth

+0

私はもっと同意できませんでした。一般的ではないジェネリック型を返す正当な理由がない限り、IEnumerableを返さなければなりません(SHOULD)。しかし、最初にToArrayまたはToListを呼び出すことなく、実際のデータベース接続に依存するIEnumerableを格納することは、あまり良い考えではないでしょう。 –

2

あなたはこのようにそれを行うことができます:ジョエルの提案ごとに更新

public class foo {  
    IEnumerable<string> AllThreads;  

    private void getThread() { 
    AllThreads = (from sc in db.ScreenCycles 
         join s in db.Screens on sc.ScreenID equals s.ScreenID 
         select s.Screen1 + " " + sc.Thread); 
    } 
} 

+0

Closeですが、.ToList()を避けるのが最善です。 –

+0

また、私は彼がStringsを返すとは思わない。 –

+0

ああ、彼は質問を変えました。そうでなければ、私は@ The Lame Duckと同じことをやったでしょう。 –

0

最初のvarは匿名クラスを定義しています。クラスを定義するために何をするのか。

しかし...あなたはおそらくこれを行うことができます:

List<string> AllThreads; 
1

varが唯一のローカル宣言として使用することができます。 LINQ式から返された型を使用する場合は、オブジェクトを構築する必要があります。

0

を試してみてください。すぐに初期化されない場合は、明示的な型を指定する必要があります。

「S」と仮定すると、型名「スクリーン」は次のとおりです。

public class foo 
{ 
    IEnumerable<Screen> AllThreads; 
    private void getThread() 
    { 
     AllThreads = from sc in db.ScreenCycles 
          join s in db.Screens on sc.ScreenID equals s.ScreenID 
          select s; 
    } 
} 
0

の多くあなたがVARを使用することはできません、と述べました。 Linq型を使用するようにコードをリファクタリングします。

public class foo 
{ 
    ScreenCycle[] allThreads; 
    private void getThread() 
    { 
     allThreads = (from sc in db.ScreenCycles join s in db.Screens on sc.ScreenID 
        equals s.ScreenID select s).ToArray(); 
    } 
} 
0

OK、これは答えではなく、このスレッドがかなりよく説明しているstackoverflowの質問に対する相対的な初心者です。

このサイトのコードマークアップツールは真剣に... um、ユニークです。この特定のケースで私が理解していないことは、なぜ私たちのコメントコードブロックはすべて非常に長いのですか?それはOPがしたことですか?以前の例ではさまざまな編集作業に疲れましたが、何らかの理由で自分のコードが入っていたテキストボックスの内容が内容よりもずっと長かったです。それは、コンパイラに指示するキーワードだ、「あなたがここに置くためにどのようなタイプを見つけ出すIので、 - varが実際にタイプではないので(IE 8)

関連する問題