如何根据另一个LINQ查询过滤结果?

时间:2011-06-08 18:11:28

标签: c# linq filtering

鉴于以下内容:

    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)
                   };

总小时数根据leadEmployee的IsLead位设置为true的人员列表正确过滤结果。

我想知道如何使用where子句执行此操作,我已经尝试使用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)
                   };

2 个答案:

答案 0 :(得分:3)

如果您选择整个员工角色,则contains只需要整个EmployeeRow。你可以:

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

OR

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

两者都有效。 (借口略微匆忙缺乏对语法准确性的考虑)。

答案 1 :(得分: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)
};
相关问题