2015-09-29 34 views
0

我正在一個小的費用跟蹤程序。這個想法是有一個列表,其中包含可以被操縱並用於執行計算的費用對象。從父列表參數沒有重複的子列表C#VS2013

我能夠創建沒有問題的列表,並填充了幾個虛擬開銷。我的費用按類別Expense.expenseType進行分組,以允許我進行分析計算,因此我正在嘗試製作另一個列表來存儲類別名稱和相關計算值。類別名稱列表旨在刪除重複項目,但到目前爲止我沒有填寫它。

我創建列表的方法是定義一個Category類,它只包含categoryName的字符串參數,而categoryTotal的float類型,儘管後者初始化爲0.00。然後,我有一個For循環,將名稱複製到列表中,第二個For循環根據名稱在被字母化後刪除索引。我已經嘗試過不同的變體,但最終我得到了一個超出界限的索引或減少但仍然重複了categoryName的列表。

真的希望得到一些建議,所以我可以繼續前進的代碼。由於我是C#/ VS的新手,因此我沒有添加實際的代碼,圖1中的問題可能都是錯誤的。

編輯1:根據我得到的反饋,我使用的功能如下:

public void getCategories(List<Category> passedCategories) 
{ 
    passedCategories = passedCategories.GroupBy(Category =>Category.strName) 
          .Select(gr => new Category 
          { 
           strName = gr.Key, 
           fltTotal = gr.Sum(ex => ex.Value) 
          }); 
} 

此功能無法正常工作,我有幾點我想澄清,我相信有其他我錯過了。

通過的類別是具有三個參數的類別列表 - strName,fltTotal和fltPercent。當整個列表通過臨時類別填充時,後兩者當前設置爲零。正在從費用列表中複製strName,其中包含更多參數。由於類別名稱將在費用清單中重複,因此我正在嘗試刪除所有重複項目,以便我可以只使用不同的類別。自從我通過列表之後,我取出了var,我是否應該這樣做?我錯過了什麼?

再次感謝您的幫助,

Yusif Nurizade

+2

請張貼您的代碼。否則,我們必須想象它......謝謝:) – Christos

+2

如果你是C#的新手,那麼你一定要添加你的代碼。 –

回答

0

你需要的是類似於下面的東西。我說了一些話,因爲我沒有看到你的代碼,我必須想象它。例如,我不知道財產的名稱的費用金額。我認爲這被稱爲價值。

// This would be the list of expenses. You have to populate it with data. 
var expenses = new List<Expense>(); 

// Using LINQ you can achieve that you want in a few lines. 
// First you group by your data by their categories. 
// Then you calculate the total expense for each category. 
var statistics = expenses.GroupBy(expense=>expsense.Type) 
         .Select(gr=> new Category 
         { 
          Name = gr.Key, 
          Total = gr.Sum(ex=>ex.Value) 
         }); 
+0

我一點一點地學習LINQ,看着這樣的問題 - 所以groupBy返回一個IEnumerable ?或者我誤解了這一點,因爲select子句似乎帶走了每個組並利用它。它是IEnumerable >?這實際上會更有意義。 –

+0

嗨,本。 'GroupBy'返回'IEnumerable >'。簡單來說就是一連串的小組。每個組是具有共同密鑰的對象的集合。是的,它就像'IEnumerable >',同一序列中的所有開銷共享相同的密鑰。 – Christos

+0

很酷。謝謝你的提示! –