2017-06-22 42 views
0

如何通过多列组来自不同表的到来,终于总结量列如何通过多列组联接使用LINQ

 var result = _employeeDAL.GetList(db => 
         from es in db.Set<EmployeeSchedule>() 
         join est in db.Set<EmployeeSalaryType>() on est.Employee_Id equals es.Employee_Id 
         join et in db.Set<EmployeeType>() on est.Employee_Salary_Id equals et.Employee_Salary_Id 
         where es.Status == "JOINED" && es.JoinedDate.Year == 2017 
         select new 
         { 
          EmployeeName = es.EmployeeName 
          ,Amount = est.Amount ///----------> SUM THIS 
          ,EmployeeType = et.EmployeeType 
         }); 

这里就是我试图

 var result = _employeeDAL.GetList(db => 
         from es in db.Set<EmployeeSchedule>() 
         join est in db.Set<EmployeeSalaryType>() on est.Employee_Id equals es.Employee_Id 
         join et in db.Set<EmployeeType>() on est.Employee_Salary_Id equals et.Employee_Salary_Id 
         group new { es, est, et } by new { es.EmployeeName, et.EmployeeType } into grp 
         where es.Status == "JOINED" && es.JoinedDate.Year == 2017 
         select new 
         { 
          EmployeeName = es.EmployeeName 
          ,Amount = grp.Sum(g=>g.est.Amount) 
          ,EmployeeType = et.EmployeeType 
         }); 
+0

那么,是什么问题? – octavioccl

+0

导致超时,所以只是检查是否有其他优化的方法来拉大数据 – Kiran

回答

2

你是差不多了。只需要考虑到在group ... by ... into grp条款之后,范围中唯一的变量是grp

group by之前那么移动where条款,并使用grp.Keyselect

var result = _employeeDAL.GetList(db => 
    from es in db.Set<EmployeeSchedule>() 
    join est in db.Set<EmployeeSalaryType>() on est.Employee_Id equals es.Employee_Id 
    join et in db.Set<EmployeeType>() on est.Employee_Salary_Id equals et.Employee_Salary_Id 
    where es.Status == "JOINED" && es.JoinedDate.Year == 2017 
    group new { es, est, et } by new { es.EmployeeName, et.EmployeeType } into grp 
    select new 
    { 
     EmployeeName = grp.Key.EmployeeName, 
     Amount = grp.Sum(g => g.est.Amount), 
     EmployeeType = grp.Key.EmployeeType, 
    });