【问题标题】:Linq summing by date in Asp.NET MVC在 Asp.NET MVC 中按日期求和 Linq
【发布时间】:2026-01-20 10:45:02
【问题描述】:
SiteCode    |     date      |softwarename  |  Success  |      Error
ASZ             2017-08-5         a              1             1
ASZ             2017-08-5         b              2             2
ASZ             2017-08-5         a              3             3
ASZ             2017-08-6         a              6             6
NBL             2017-08-5         a              5             5


var CurrentCustomer = Database.Session.Query<Customer>()
    .FirstOrDefault(x => x.deleted_at == null 
        && x.Customer_Username == User.Identity.Name);

if(CurrentCustomer != null) 
{
    var CurrentDepValues = Database.Session.Query<deployments>()
        .Where(x => x.SiteCode == CurrentCustomer.SiteCode 
            && x.softwarename == current_type)
        .OrderBy(x => x.date)
        .ToList();
}

我有一个这样的数据库。我想得到如下输出。相同的日期值应该是总和。

SiteCode    |     date      |softwarename  |  Success  |      Error
ASZ             2017-08-5         a              4             4
ASZ             2017-08-6         a              6             6

【问题讨论】:

  • 你可以使用 GroupBy(x=>x.date).Select(blah).ToList()
  • 但是,我将如何总结成功和错误?

标签: asp.net asp.net-mvc linq


【解决方案1】:

使用GroupBy

if(CurrentCustomer != null) {
     var CurrentDepValues = Database.Session.Query<deployments>()
      .Where(x => x.SiteCode == CurrentCustomer.SiteCode 
          && x.softwarename == current_type)
      .GroupBy (x => new {x.SiteCode, x.date, x.softwarename})
      .Select (g => new {
            SiteCode = g.Key.SiteCode,
            Date = g.Key.date,
            SoftwareName = g.Key.softwarename,
            Success = g.Sum(x => x.Success),
            Error = g.Sum(x => x.Error)
      })
      .OrderBy(x => x.Date)
      .ToList();
}   

编辑

上面将创建一个匿名类型。 如果你想得到List&lt;Models.deployments&gt;,你应该在select lambda中这样做:

.Select (g => new Models.deployments {
            SiteCode = g.Key.SiteCode,
            Date = g.Key.date,
            SoftwareName = g.Key.softwarename,
            Success = g.Sum(x => x.Success),
            Error = g.Sum(x => x.Error)
      })

【讨论】:

  • 我还有一个问题。我无法使用当前的 ViewModel 将其传输到视图。 (public IList deployments { get; set; }) 如何在 ViewModel 中编写?