2011-05-26 66 views
1
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) 
        }; 

随着环类,我可以能够得到下面没有被包含在雇员表的employeename使用的GroupBy获取雇员姓名,雇员,和通过支付使用LINQ

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

如何我从上面获取EmployeeName吗?

回答

1

我会通过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), 
    ... 
+0

好把沃尔玛感谢名单。 – mkaris 2011-05-26 14:50:47