3

私のリポジトリはアカウントのリストを返します。

各アカウントには、日付と 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 をどの型にする必要がありますか?

4

3 に答える 3

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)
}                         
于 2009-06-23T21:20:29.947 に答える
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)
          };

その後、このモデルをビューのタイプとして使用できます。

于 2009-06-23T21:23:07.697 に答える
1

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

于 2009-06-23T21:19:18.017 に答える