【发布时间】:2021-05-28 06:20:49
【问题描述】:
我想对表格中的每一列求和,如下所示: enter image description here
此表的模型称为 TotalConfiguration,如下所示:
public class TotalConfiguration
{
[Key]
public int idTotalConfiguration { get; set; }
[ForeignKey("Projects")]
public Guid IdProjects { get; set; }
public int January { get; set; }
public int February { get; set; }
public int March { get; set; }
public int April { get; set; }
public int May { get; set; }
public int June { get; set; }
public int July { get; set; }
public int August { get; set; }
public int September { get; set; }
public int October { get; set; }
public int November { get; set; }
public int December { get; set; }
public Projects Projects { get; set; }
}
这个名为 Projects 的表的模型如下所示:
public class Projects
{
[Key]
public Guid IdProject { get; set; }
[Required]
public string OwnerName { get; set; }
[Required]
public string ProjectAdress1 { get; set; }
public string ProjectAdress2 { get; set; }
[Required]
public string ProjectPostcode { get; set; }
[Required]
public string ProjectCity { get; set; }
public TotalConfiguration TotalConfiguration { get; set; }
}
这个名为 ProjectsUser 的表的模型如下所示:
public class ProjectsUser
{
[Key]
public int IdProjectsUser { get; set; }
[ForeignKey("User")]
public Guid IdUser { get; set; }
[ForeignKey("Projects")]
public Guid IdProject { get; set; }
[Required]
public virtual User User { get; set;}
[Required]
public virtual Projects Projects { get; set; }
}
在我的控制器中,我想将所有列与 TotalConfiguration 的对象相加。我的代码:
public IActionResult GetTotalConfiguration(Guid userId)
{
TotalConfiguration totalConfiguration3 = _context.ProjectsUser
.Where(x => x.IdUser == userId)
.GroupBy(x => x.IdUser)
.Select(x => new TotalConfiguration
{
January = x.Sum(x => x.Projects.TotalConfiguration.January),
February = x.Sum(x => x.Projects.TotalConfiguration.January),
March = x.Sum(x => x.Projects.TotalConfiguration.January),
April = x.Sum(x => x.Projects.TotalConfiguration.January),
May = x.Sum(x => x.Projects.TotalConfiguration.January),
June = x.Sum(x => x.Projects.TotalConfiguration.January),
July = x.Sum(x => x.Projects.TotalConfiguration.January),
August = x.Sum(x => x.Projects.TotalConfiguration.January),
September = x.Sum(x => x.Projects.TotalConfiguration.January),
October = x.Sum(x => x.Projects.TotalConfiguration.January),
November = x.Sum(x => x.Projects.TotalConfiguration.January),
December = x.Sum(x => x.Projects.TotalConfiguration.January),
})
.FirstOrDefault();
如果我运行这段代码,我得到了错误:
System.InvalidOperationException: 'The LINQ expression 'GroupByShaperExpression:
KeySelector: p.IdUser,
ElementSelector:EntityShaperExpression:
EntityType: ProjectsUser
ValueBufferExpression:
ProjectionBindingExpression: EmptyProjectionMember
IsNullable: False
.Sum(x => x.Projects.TotalConfiguration.January)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'. See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.'
当我将结果保存到 IEnumerable 时,我没有收到此错误(但我想将结果保存为 TotalConfiguration 对象)
【问题讨论】: