2011-06-08 74 views
2

考慮以下幾點:如何過濾一個基於另一個LINQ查詢的結果?

DP_DatabaseTableAdapters.EmployeeTableAdapter employeetableAdapter = new DP_DatabaseTableAdapters.EmployeeTableAdapter(); 
    DP_Database.EmployeeDataTable employeeTable = employeetableAdapter.GetData(); 

    var leadEmployees = from e in employeeTable 
         where e.IsLead == true 
         select e; 

    DP_DatabaseTableAdapters.LaborTicketTableAdapter tableAdapter = new DP_DatabaseTableAdapters.LaborTicketTableAdapter(); 
    DP_Database.LaborTicketDataTable table = tableAdapter.GetDataByDate(date.ToString("MM/dd/yyyy")); 

    var totHours = from l in table 
        join e in leadEmployees on l.EmployeeID equals e.EmployeeID 
        group l by l.EmployeeID into g 
        orderby g.Key 
        select new 
        { 
         EmployeeID = g.Key, 
         HoursWorked = g.Sum(s => s.HoursWorked) 
        }; 

總工時正確篩選的基礎誰擁有IsLead位設置爲true人leadEmployee名單上的結果。

我想知道如何使用where子句做到這一點,我已經attempd使用leadEmployees.Contanis不過需要一個整體EmployeeRow ...

我怎麼能添加什麼看起來是一個組成部分IN子句到where過濾器來替換連接?

var totHours = from l in table 
        where ?????? 
        group l by l.EmployeeID into g 
        orderby g.Key 
        select new 
        { 
         EmployeeID = g.Key, 
         HoursWorked = g.Sum(s => s.HoursWorked) 
        }; 
+0

這樣,這將您的where子句需要專門評價? – Firoso 2011-06-08 18:16:47

+0

與您的主要問題無關,但您可以簡化收集領導僱員的行:var leadEmployees = employeeTable.Where(e => e.IsLead);' – 2011-06-08 19:25:17

回答

3

如果您選擇整個員工角色,包含將只需要整個EmployeeRow。您可以:

leadEmployees.Select(e => e.id).contains 

OR

leadEmployees.Count(e => e.id == l.id) > 0 

雙方將合作。 (對於語法準確性,有些匆忙缺乏考慮)。

1

這應該工作:

var leadEmployees = from e in employeeTable       
where e.IsLead == true       
select e.EmployeeID; 

var totHours = from l in table     
where leadEmployees.Contains(l.EmployeeID)    
group l by l.EmployeeID into g  
orderby g.Key 
select new 
{      
EmployeeID = g.Key, 
HoursWorked = g.Sum(s => s.HoursWorked) 
}; 
相關問題