2011-07-07 23 views
2

我正在編寫報告並加載數據以在報告使用LINQ加載後立即顯示。將LINQ結果存儲在全局變量中的最佳類型

summaryData = from summary in _entity.Summary 
       // some constraints here 
       select new 
       { 
        summary.payment_category_desc, 
        summary.payment_due_amt, 
        summary.currency_desc 
       };    

我需要在不同的事件(PrintDetail)後食用這些結果的方式,我可以,例如,說:

string name = summaryData[currentIndex].payment_category_desc 

基本上我需要的是找到如何將LINQ結果存儲在一個全局變量中,我可以稍後將其枚舉。我試過IQueriable,它不會讓我。爲了能夠使用ToList(),我也試圖避免創建一個具有三個成員的類。

有什麼想法?

+1

什麼是全局變量? –

+0

您是否考慮創建一個包含這三個變量的類,然後將結果存儲在「全局」列表中? –

+0

不真正理解你的poit。 LINQ的結果已經是枚舉器,所以你可以枚舉。 – Tigran

回答

2

編輯說實話,我只是注意到你使用的是匿名類型。正如你現在已經知道的那樣,你不可能在你的方法之外得到一個匿名類型。但是,你可以使用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:**更新的答案** – sehe

+1

使用'Tuple.Create(...)'會更容易,它會推斷出類型參數,所以你不必重複' '。 –

1

就個人而言,我會避免使用全局變量。當你擁有諸如全局變量之類的依賴關係時,你會更難測試你的應用程序。

我不知道你的確切架構,但我很想將對象傳遞給需要它的相關方法。至少你可以輕鬆地嘲笑你的對象,並減少依賴。

+0

基本上我在報告「BeforePrint」事件中加載數據,然後我需要在詳細的「BeforePrint」事件中使用它,我必須對它進行索引以遍歷所有結果。 – allendehl

1

您的IQueryable結果採用了緩存執行。如果您在「使用」塊內編寫代碼,則當您嘗試訪問結果(全局變量或非全局變量)時,您將無法建立連接。

嘗試通過ToList()擴展方法從LINQ查詢返回List。

相關問題