[英]How can I filter results of one LINQ query based on another?
鑒於以下情況:
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 根據將 IsLead 位設置為 true 的leadEmployee 的人員列表正確過濾結果。
我想知道如何使用 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)
};
如果您選擇整個員工角色,則包含只需要整個 EmployeeRow。 您可以:
leadEmployees.Select(e => e.id).contains
或者
leadEmployees.Count(e => e.id == l.id) > 0
兩者都會起作用。 (請原諒稍微匆忙地缺乏對語法准確性的考慮)。
這應該有效:
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)
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.