【问题标题】:Need help with LINQ query and ASP.NET MVC?在 LINQ 查询和 ASP.NET MVC 方面需要帮助?
【发布时间】:2009-06-23 21:14:25
【问题描述】:

我的存储库返回一个帐户列表。

每个帐户都有一个日期和一个 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();

    }

这似乎是计算每月总计的正确方法吗?

另外,我一直在为每个视图使用带有 ViewModels 的强类型视图,那么我应该制作什么类型的每月总计,以便我可以将它作为一个字段添加到我的 ViewModel 上并将其传递给我的视图?

【问题讨论】:

    标签: asp.net-mvc linq linq-to-sql viewmodel


    【解决方案1】:

    我觉得很合适。

    当我需要将这样的数据传递给我的视图时,我会为它创建一个类。所以你的班级应该是这样的:

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

    【讨论】:

    • 我应该在我的 ViewModels 目录中添加这个类吗?
    • 我就是这么做的。如果您认为它太小而不能成为自己的文件,您可以将其与其他相关类之一放在一起。
    【解决方案2】:

    我可能会将该逻辑分解为包含业务逻辑的服务层类。除此之外,如果视图期望的结构与模型不同,您可以在返回自定义模型类型的服务方法中转换结果。

    【讨论】:

      【解决方案3】:

      使用匿名类型是行不通的,因为视图代码不知道它有什么属性。我建议在 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)
                };
      

      然后您可以将此模型用作视图的类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-26
        相关资源
        最近更新 更多