Linq包含问题:无法制定相当于'WHERE IN'的查询

时间:2011-07-06 21:50:57

标签: linq contains

在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的记录?

1 个答案:

答案 0 :(得分:2)

目前,您正在使用一个属性动态构建一个匿名对象。你想直接抓住id(注意缺少的花括号):

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

此外,在这种情况下,不要在其上调用ToList - 变量userIDs只包含查询,而不是结果。如果在另一个查询中使用该变量,则提供程序可以将其转换为单个sql查询。