2009-06-23 45 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) 
      }; 

然后,您可以使用此模型作为视图类型。