Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何基于另一个LINQ查询过滤一个LINQ查询的结果?_C#_Linq_Filtering - Fatal编程技术网

C# 如何基于另一个LINQ查询过滤一个LINQ查询的结果?

C# 如何基于另一个LINQ查询过滤一个LINQ查询的结果?,c#,linq,filtering,C#,Linq,Filtering,鉴于以下情况: DP_DatabaseTableAdapters.EmployeeTableAdapter employeetableAdapter = new DP_DatabaseTableAdapters.EmployeeTableAdapter(); DP_Database.EmployeeDataTable employeeTable = employeetableAdapter.GetData(); var leadEmployees = from e in

鉴于以下情况:

    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)
                   };
Total hours根据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)
                   };

如果您选择的是整个员工角色,则contains将只需要一个完整的EmployeeRow。您可以:

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

两者都会起作用。(请原谅我没有考虑语法准确性)。

这应该可以:

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

那么,您的where子句需要具体评估什么?与您的主要问题无关,但您可以简化收集主要员工的行:
var leadeemployeetable=employeeTable.where(e=>e.IsLead)
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)
};