2009-06-23 59 views
3

我的存儲庫返回一個帳戶列表。需要關於LINQ查詢和ASP.NET MVC的幫助?

每個帳戶都有一個日期和一個MoneySpent小數。所以,我有我的賬戶清單,在我的控制器中,我正在嘗試處理這個清單。

我想要一個對象,其中包含我帳戶列表中所有月份的字符串名稱以及該月所花費的所有金額的總和。

這是我曾嘗試:

[AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult Detail(int id) 
    { 
     var recentAccounts = accountRepository.GetAccountsSince(DateTime.Now.AddMonths(-6)); 

     var monthlyTotals = from a in recentAccounts 
          group a by a.DateAssigned.Month.ToString("MMM") into m 
          select new 
          { 
           Month = m.Key, 
           MonthSum = m.Sum(a => a.MoneySpent) 
          }; 


     return View(); 

    } 

這是否看起來像計算monthlyTotals正確的方式?

另外,我一直在爲每個視圖使用ViewModels的強類型化視圖,所以我應該在每個月制定什麼類型的小標題,以便將其添加爲ViewModel中的字段並將其傳遞給View?

回答

3

看起來很對我。

當我需要將這樣的數據傳遞給我的視圖時,我爲它創建了一個類。所以,你的類應該是這樣的:

public class MonthlyTotal 
{ 
    public string Month { get; set; } 
    public decimal MonthSum { get; set; } 
} 

和SELECT子句是這樣的:

select new MonthlyTotal       
{         
    Month = m.Key,        
    MonthSum= m.Sum(a => a.AmountAssigned) 
}       
+0

我應該只在我的ViewModels目錄中添加這個類? – AlexanderTheGreat 2009-06-23 21:21:54

1

我可能會將該邏輯分解爲一個保存業務邏輯的服務層類。除此之外,如果視圖需要與模型不同的結構,則可以將結果轉換爲返回自定義模型類型的service方法。

1

使用匿名類型不會起作用,因爲視圖代碼不會知道是什麼性質,具有。我建議在Models目錄中創建一個僅查看模型。

public class MonthlySumModel 
{ 
    public string Month { get; set; } 
    public decimal Sum { get; set; } 
} 

然後在SELECT語句創建一個新的模型值:

select new MonthlySumModel 
      { 
       Month = m.Key, 
       Sum = m.Sum(a => a.MoneySpent) 
      }; 

然後,您可以使用此模型作爲視圖類型。