Проблема заключается в том, что вы выбираете новый анонимный тип, а не только зарплаты. Все, что вам нужно сделать, это изменить последнюю строку с select new { s.Salary.Value });
на select s.Salary.GetValueOrDefault());
. Это даст вам список типов данных s.Salary
(может быть, double?
?)
Итак, ваш запрос сейчасэто:
var x = (from e in EmpDB.Employees
join d in EmpDB.Departments on e.DepId equals d.Id
join s in EmpDB.EmpSalaries on new { d.Zone, d.Vendor, d.Status } equals new { s.Zone, s.Vendor, s.Status}
where e.Status = "Active" && e.BAID != NULL && e.DepId == 3
select s.Salary.GetValueOrDefault());
Для всех, кто хочет использовать Expression LINQ, вот оно, для всех, кому все равно, вы можете прекратить чтение.
var allSalaries = EmpDB.Employees.Join(EmpDB.Departments, employee => employee.DepId, department => department.Id,
(employee, department) => new {Employee = employee, Department = department})
.Join(EmpDB.EmpSalaries, emplDept => new
{emplDept.Department.Status, emplDept.Department.Vendor, emplDept.Department.Zone}
, emplSalary => new {emplSalary.Status, emplSalary.Vendor, emplSalary.Zone},
(emplDept, emplSalary) => emplSalary.Salary).Sum();
Оба запросане очень читабельны, так как это довольно сложные запросы