2009-08-19 9 views
0

私はメソッドを持つクラスMyClass持っている:私は次のようにこのメソッドを呼び出すしたいと思いますLinqクエリで使用するための参照パラメータ変数をどのように宣言しますか?

public bool MyMethod(out DateTime? MyDate) { 
    ... 
} 

:私は持っていないだって

var q = from mc in MyClasses.AsEnumerable() 
     from output in mc.MyMethod(out dt) // how to declare dt? 
     select new { mc, output, dt }; 

は明らかにこれは、コンパイルされませんがdtと宣言しました。 (a)必要な範囲よりも大きなレベルで変数を宣言したくない、(b)直感的に直感的ではないその値がクエリ内の各行に対して正しく計算されることは明らかです。

クエリ内にDateTime? dtと宣言できる構文はありますか?

答えて

6

そのDTの範囲はここでの問題である。そのだけで、あなたのMyMethodは()は、あなたがしようとしているものを

本当にわからない(句から二番目)SelectManyを動作させるための列挙を返す必要がありますありませんここで達成するが、あなたの関数には、boolと日付を含む構造体やクラスを返すようになっていて、let文を使ってそれを割り当てる...

var qry = from mc in MyClasses.FunctThatReturnsAnIEnumerable() 
      let result = mc.MyMethod() //this returns the struct 
      select new {mc, result.BoolVal, result.DateVal}; 
+0

+1これはいい考えです。 @ Marcの答えに対する私のコメントを参照してください。両方の価値に意味と重要性があるので、おそらくそれを自分たちのクラスに入れるのは正しいでしょう。 –

5

私の最初の考えは "ew"です(これは私のコードのにおい音です)。私はあなたが本当にそれが属していない方法を強制的に使用しようとしていると感じています。

私の次の思想は、(私はまだ良い解決策としてこれをお勧めしませんが)単にあなたが望む行動、など多分何かを作成するために、次のようになります。そして、

public DateTime? GetMyDate() 
{ 
    DateTime? dt; 
    MyMethod(out dt); 
    return dt; 
} 

...

var q = from mc in MyClasses.AsEnumerable() 
     select new { mc, output, Date = GetMyDate() }; 

私は、このコンテキストでMyDateから返されたboolが重要ではないことを想定しています。これは本当に意図を破ります。あなたが望む結果が与えられれば、あなたはブールリターンについても気にしていないようだから、私はそれだけを仮定します。

どちらの場合でも、私はあなたが持っているものに納得するのではなく、これを再考することをお勧めします。

+0

まあ、コメントは面白いですが、なぜ私は "出力"とMyDateの両方が必要な可能性を秘めていますか?実際、私の「本当の」コードでは、MyMethodの出力は私が最も関心を持っていることです(それは有効なことを意味します)。そして、datetimeは有効期限です。どちらの値も本質的かつ重要な意味を持っています。 –

+0

あなたの使用例ではそうしているので、私はそれを却下します。私はそれが他のどこかのニーズを満たすことができないかもしれないことを暗示しているわけではありません。あなたの願いは再利用されているようです。そうであれば、私の推薦では、あなたのソースを見ないと、あなたのDateTimeを読み込んで* this *(そしてあなたのMyDate(..)関数で)呼び出す基本的なロジックを抽出することです。申し訳ありませんが、別の文脈では役に立たないという意味ではありません。 – Marc

+0

ああ、振り返ってみると、出力をどのように使用しようとしているのかがわかりました。申し訳ありませんが、構文が完全に私を捨てました。それを捕まえて使用可能な解決策を提供するために、Timに+1してください。 – Marc

関連する問題