我有一个想传递给Razor视图的MVC ViewModel。在控制器中,我创建了一个数据库上下文,并使用Linq将表连接在一起。归纳汇总后,我得到一个错误:
错误CS1061'十进制'不包含'GroupBy'的定义,并且找不到可访问的扩展方法'GroupBy'接受类型为'decimal'的第一个参数(您是否缺少using指令或程序集引用?< / p>
我已经遍历了关于堆栈溢出和google的几乎每个示例,找不到与查询结构相匹配的示例。另外,MS的例子非常琐碎,用处不大。
这是控制器中的动作:
public IHttpActionResult GetEmployeeReleasedAllocatedBonus(int eid)
{
var employeeReleasedAllocatedBonus =
(from br in _context.BonusReleases
join emp in _context.Employees
on new
{
br.EmployeeID,
empID = br.EmployeeID
} equals new
{
emp.EmployeeID,
empID = eid
}
join job in _context.Jobs on br.JobID equals job.JobID
join bonus in _context.Bonus
on new
{
br.JobID,
empID = br.EmployeeID
}
equals new
{
bonus.JobID,
empID = bonus.EmployeeID
}
select new EmployeeAllocatedReleasedBonusViewModel()
{
AllocatedToEmployee = br.Amount, AllocatedPercentage = bonus.Amount * 100
,
JobNumber = job.JobNumber, JobDescription = job.JobDescription
})
.ToList()
.Sum(s => s.AllocatedToEmployee)
.GroupBy(g => new {g.JobNumber, g.JobDescription, g.AllocatedPercentage});
return Ok(employeeReleasedAllocatedBonus);
}
值得一提的是,AllocatedPercentage数据类型是十进制。但是,我尝试将其更改为字符串,但错误消息仍然存在。
也尝试在.ToList()之前使用组功能,但这也不起作用。
答案 0 :(得分:0)
在ToList()
之后,您有一个List<EmployeeAllocatedReleasedBonusViewModel>
。
在Sum(s => s.AllocatedToEmployee)
中,每个s
都是一个EmployeeAllocatedReleasedBonusViewModel
。显然,EmployeeAllocatedReleasedBonusViewModel
具有属性AllocatedToEmployee
,该属性可能是十进制类型。可以将其总计为小数点后一位。
Sum
(十进制)的结果是您的GroupBy
的输入。十进制类型是否有方法GroupBy
?当然不是!
las,您忘了告诉我们您的要求。很难从不执行所需功能的代码中提取它们。
在我看来,您有两个一对多的关系:
Employees
具有零个或多个BonusReleases
。每个BonusRelease
都属于使用外键的一个Employee
Jobs
具有零个或多个BonusReleases
。每个BonusRelease
都完全属于一个Job
。现在您想要什么:您要全部JobNumbers
的{{1}}和JobDescriptions
中的全部Jobs
吗?我不确定AllocatedPercentage
在此查询中的作用。
无论何时,只要您想要带有子项目的项目,例如学校和学生,订单的客户,订单的订单行的订单,都可以使用GroupJoin。如果相反,则是:所在学校的学生,与下订单的客户下订单,请使用加入。
Employees
还是您想要JobNumber / JobDescription /每个员工分配的总奖金?
var result = dbContext.Jobs.GroupJoin(dbContext.BonusReleases,
job => job.Id, // from every Job take the primary key
bonusRelease => bonusReleas.JobId, // from every BonusRelease take the foreign key
// parameter ResultSelector: take every Job with all its BonusReleases to make a new:
(job, bonusReleasesOfThisJob) => new
{
JobNumber = job.JobNumber,
JobDescription = job.JobDescription
// do you want the total of all allocated percentages?
TotalAllocatedPercentages = bonusReleasesOfThisJob
.Select(bonus => bonus.Amount)
.Sum(),
// do something to make it a percentage
// or do you want a sequence of allocated percentages?
TotalAllocatedPercentages = bonusReleasesOfThisJob
.Select(bonus => bonus.Amount)
.ToList(),
});
答案 1 :(得分:0)
Harald的评论是关键-在ToList()之后,我有一个列表。因此,我退后一步说,如果先将结果放入匿名对象该怎么办。然后进行分组,然后进行求和,将最终结果放入视图模型。有效。这是答案。
module.exports = {
siteMetadata: {
title: 'Your site',
},
plugins: [
// Gets rid of the service worker
'gatsby-plugin-remove-serviceworker'
]
}