используя GroupBy для получения имени сотрудника, идентификатора сотрудника, суммы по оплате по категориям с использованием LINQ - PullRequest
1 голос
/ 26 мая 2011
List<ps_Employee> _Employees = Employee.GetListOfActiveEmployees();
List<ps_Detail> _Details  = Detail.GetListOfDetails();

var _RowDetails = from _Detail in _Details
                  join _Employee in _Employees on _Detail.EmployeeCode equals _Employee.EmployeeCode select new { Employee = _Employee, Detail = _Detail } into EmployeePayDetail
                  group EmployeePayDetail by EmployeePayDetail.Detail.EmployeeCode into x
                  select new
                  {
                      EmployeeCode = x.Key,
                      BasicPay = x.Where(i => i.Detail.ComponentCode.Equals("PE01")).Sum(a => a.Detail.Amount),
                      OtherIncome = x.Where(i => i.Detail.ComponentCode.StartsWith("PE")
                                            && !i.Detail.ComponentCode.Equals("PE01")).Sum(a => a.Detail.Amount),
                      Deductions = x.Where(i => i.Detail.ComponentCode.StartsWith("PD")).Sum(a => a.Detail.Amount),
                      GrossPay = x.Where(i => i.Detail.ComponentCode.StartsWith("PE")).Sum(a => a.Detail.Amount),
                      PAYE = x.Where(i => i.Detail.ComponentCode.Equals("PD03")).Sum(a => a.Detail.Amount),
                      NetPay = x.Where(i => i.Detail.ComponentCode.Equals("PE01")).Sum(a => a.Detail.Amount)
                  };

С помощью цикла я могу получить доступ без имени сотрудника, которое содержится в таблице сотрудников

employeeCode EmployeeName PEO1    PD 
x001           ?????      200.00  400.00

как мне получить имя сотрудника сверху?

1 Ответ

1 голос
/ 26 мая 2011

Я бы сгруппировал по EmployeePayDetail.Employee, что вам действительно нужно, тогда:

select new
{
    EmployeeCode = x.Key.EmployeeCode,
    EmployeeName = x.Key.EmployeeName,
    BasicPay = x.Where(i => i.Detail.ComponentCode.Equals("PE01")).Sum(a => a.Detail.Amount),
    ...
...