2011-07-07 18 views
2

LINQを使用してレポートをロードするとすぐにレポートを作成し、表示するデータをロードしています。LINQ結果をグローバル変数に格納するのに最適なタイプ

私は、例えば、言うことができるように、さまざまなイベント(PrintDetail)の後半で、これらの結果を消費する必要が
summaryData = from summary in _entity.Summary 
       // some constraints here 
       select new 
       { 
        summary.payment_category_desc, 
        summary.payment_due_amt, 
        summary.currency_desc 
       };    

string name = summaryData[currentIndex].payment_category_desc 

は、基本的には私が必要なものをどのように見つけることです後で列挙できるグローバル変数にLINQの結果を格納します。私はIQueriableを試してみました。また、ToList()を使用できるようにするために、3つのメンバーを持つクラスを作成する必要がないようにしようとしています。

どのような考えですか?

+1

グローバル変数とは何ですか? –

+0

これらの3つの変数を含むクラスを作成し、その結果を「グローバル」リストに格納することを検討しましたか? –

+0

あなたのpoitを本当に理解していない。 LINQの結果は既に列挙されているため、列挙できます。 – Tigran

答えて

2

編集正直言って、私は匿名のタイプを使用していたことに気づいただけです。あなたがすでに知っているように、あなたのメソッドの外側にanon型を得る方法はありません。しかし、あなたがC#4.0タプルを使用することができます<>

以下はsummaryDataが現在の方法/渡さお外で定義されたときに動作します:

summaryData = from summary in _entity.Summary 
      // some constraints here 
      select new Tuple<string, DateTime, decimal> 
      { 
       summary.payment_category_desc, 
       summary.payment_due_amt, 
       summary.currency_desc 
      };    

それがコレクションである場合、あるものは何でもします/クエリ結果、IEnumerable<T>は動作します

リストに変換する必要があるかどうかを確認してください(結果をキャッシュする)かどうかは、最初に.ToList()としてください。 元の列挙子が複数回実行されると、(パフォーマンス)問題が発生する可能性があります。列挙子が開いてアクセスできないファイルにアクセスするときを考えてみてください。

+0

ToList()を使用するには、リストのsummaryDataを宣言できるように、結果を保持するクラスを作成する必要があります。 私はこれを避けようとしていましたが、それが私の最良の選択でない限り。 – allendehl

+0

allendehl:** updated answer ** – sehe

+1

'Tuple.Create(...)'を使う方が簡単です。これは型引数を推測するので、 'を繰り返す必要はありません。 '。 –

1

個人的に私はグローバル変数を使用しないでください。グローバル変数などの依存関係があるときは、アプリケーションをテストするのが難しくなります。

正確なアーキテクチャはわかりませんが、それを必要とする関連するメソッドにオブジェクトを渡すように誘惑されます。少なくともこのようにすれば、オブジェクトを簡単にモックでき、依存関係を減らすことができます。

+0

基本的には、レポート "BeforePrint"イベントでデータをロードしています。その後、すべての結果を反復処理するために、インデックス "BeforePrint"イベントでそれを消費する必要があります。 – allendehl

1

IQueryableの結果では、実行が無効になります。 "using"ブロックの中でコーディングしている場合、結果にアクセスしようとすると(グローバル変数かどうかにかかわらず)接続されません。

LINQクエリからToList()拡張メソッドを使用してリストを返すようにしてください。

関連する問題