2009-06-23 13 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のフィールドとして追加してビューに渡すことができるように、どのタイプをmonthlyTotalsにする必要がありますか?

答えて

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

+0

それは私がしていることです。独自のファイルにするには小さすぎると思う場合は、他の関連するクラスの1つを使用して配置することができます。 –

1

私はおそらくそのロジックをビジネスロジックを持つサービスレイヤクラスに分解します。それに加えて、ビューがモデルと異なる構造を期待している場合は、カスタムモデルタイプを返すサービスメソッドの結果を変換します。

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) 
      }; 

あなたは、ビューの型としてこのモデルを使用することができます。

関連する問題