如何将联接与 LinQ To 实体结合使用



我有这个代码

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

相关内容

最新更新