在ReservationWorkerPeriods表中,有计划在任何可能的机器上在给定时间段内工作的所有工人的记录。
附加表WorkerOnMachineOnConstructionSite包含columnsId,MachineId和ConstructionSiteId列。
从表ReservationWorkerPeriods我想只检索在选定机器上工作的工人。
为了从WorkerOnMachineOnConstructionSite表中检索相关记录,我编写了以下代码:
var relevantWorkerOnMachineOnConstructionSite = (from cswm in currentConstructionSiteSchedule.ContrustionSiteWorkerOnMachine
where cswm.MachineId == machineId
select cswm).ToList();
workerOnMachineOnConstructionSite = relevantWorkerOnMachineOnConstructionSite as List<ContrustionSiteWorkerOnMachine>;
这些记录也在应用程序中使用,所以我不想绕过上面的代码,即使可以直接检索在选定机器上工作的worker的workerPeriods。无论如何,一旦我们知道哪些用户ID是相关的,我就没有想出如何检索相关的workerPeriods。
我尝试过以下代码:
var userIDs = from w in workerOnMachineOnConstructionSite select new {w.WorkerId};
List<ReservationWorkerPeriods> workerPeriods = currentConstructionSiteSchedule.ReservationWorkerPeriods.ToList();
allocatedWorkers = workerPeriods.Where(wp => userIDs.Contains(wp.WorkerId));
但它似乎不正确,不知道如何解决它。有谁知道问题是什么,以及如何从列表中检索包含userID的记录?
答案 0 :(得分:2)
目前,您正在使用一个属性动态构建一个匿名对象。你想直接抓住id(注意缺少的花括号):
var userIDs = from w in workerOnMachineOnConstructionSite select w.WorkerId;
此外,在这种情况下,不要在其上调用ToList
- 变量userIDs
只包含查询,而不是结果。如果在另一个查询中使用该变量,则提供程序可以将其转换为单个sql查询。