2011-07-06 28 views
0

在表ReservationWorkerPeriods中,有计划在任何可能机器的给定时间段内工作的所有员工的记录。Linq包含问题:无法制定'WHERE IN'查询的等效查询

附加表WorkerOnMachineOnConstructionSite包含列workerId,MachineId和ConstructionSiteId。

从表ReservationWorkerPeriods我想检索只是在选定的机器上工作的工人。

为了获取从我写了下面的代码WorkerOnMachineOnConstructionSite表只是相关记录:

var relevantWorkerOnMachineOnConstructionSite = (from cswm in currentConstructionSiteSchedule.ContrustionSiteWorkerOnMachine 
                 where cswm.MachineId == machineId 
                 select cswm).ToList(); 
     workerOnMachineOnConstructionSite = relevantWorkerOnMachineOnConstructionSite as List<ContrustionSiteWorkerOnMachine>; 

这些记录也应用程序中使用,所以我不希望哪怕是为了绕过上面的代码可能直接检索在所选机器上工作的工人的workerPeriods。无论如何,一旦我们知道哪些用户标识符是相关的,我还没有想出如何检索相关的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)); 

,但它似乎是不正确的,不知道如何解决它。有谁知道什么是问题,以及如何从列表中检索包含用户标识的记录?

回答

2

当前,您正在构建一个匿名对象,并具有一个属性。你要抢ID直接与(注意没有大括号):

var userIDs = from w in workerOnMachineOnConstructionSite select w.WorkerId; 

而且,在这种情况下,不要调用它ToList - 变量userIDs只包含查询,而不是结果。如果您在进一步的查询中使用该变量,则提供程序可以将其转换为单个SQL查询。