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