2011-07-06 68 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查詢。