我有这个代码
var value = (from dc in _context.ContractDetails
where dc.EmployeeID == id
select dc.Amount);
return value;
}
做 Value.Sum(( 是否可以接受;
你想返回它看起来的总和。与其让查询成为小数,不如让它成为它想要的(var,它真的很IEnumerable<decimal>
(。然后,您可以返回一个聚合。例如总和
var query = from emp in Employees
join cd in ContractDetails
on emp.EmployeeID equals cd.EmployeeID
where cd.EmployeeID == id
select cd.Amount;
return query.Sum();
如果这就是它的全部作用,那么我也觉得你根本不需要加入,而且做起来会更简单
var query = from cd in ContractDetails
where cd.EmployeeID == id
select cd.Amount;
return query.Sum();
。除非您使用联接来测试雇员表中是否存在雇员作为条件。
linq 语句导致IQueryable<Amount>
,您需要获取该结果并调用Sum()
才能获得所需的结果。
首先,没有您可以使用的导航属性(即Employee.ContracteDetails
( 而不是手动连接两个集合? 例如
var sum = _context.Employee
.Where( e => e.Id == id )
.Select( e => e.ContractDetails.Sum( cd => cd.Amount ) )
.SingleOrDefault();
其次,你没有使用你需要从Employee
获得的任何信息,甚至你的where
子句引用ContractDetails
单独;为什么要从那里开始你的查询? 请改用_context.ContractDetails
:
var sum = _context.ContractDetails
.Where( cd => cd.EmployeeId == id )
.Sum( cd => cd.Amount );