2016-03-02 47 views
3

everyone!我正在嘗試做一個相當簡單的LINQ查詢來查找酒店中的可用房間。 (也就是說,從房間池中找到可用房間,並檢查房間內是否有待處理的清潔等)。不支持本地收藏的查詢LINQ

但是當我嘗試執行第三個查詢時,我得到了在標題中看到的異常。當我執行它時,我實際上沒有得到異常,但是當我嘗試使用「unfinishedTasksInPool」變量時。

我試着將「unfinishedTasksInPool」轉換成列表,看看是否有幫助,但是每當我嘗試使用「unfinishedTasksInPool」,我都會得到異常。

編輯:每當我在第三個查詢在where子句中排除「availableRoomsFromPool.Contains(tasks.roomId」,一切似乎都正常工作,但是,這並不完全解決問題壽

var pendingReservation = database.Reservations.Where(res => res.reservationID == resId).First(); 

var reservationsInSameGroup = from otherReservations in database.GetTable<Reservation>() 
           where (otherReservations.beds == pendingReservation.beds 
            && otherReservations.rank == pendingReservation.rank 
            && otherReservations.roomID != null) 
           select otherReservations.roomID; 


var availableRoomsFromPool = from rooms in database.GetTable<Room>() 
        where (!reservationsInSameGroup.Contains(rooms.roomId) 
        && rooms.beds == pendingReservation.beds 
            && rooms.roomRank == pendingReservation.rank) 
        select rooms.roomId; 

var unfinishedTasksInPool = from tasks in database.GetTable<HotelTask>() 
         where (availableRoomsFromPool.Contains(tasks.roomId) 
         && tasks.taskStatus < 2) 
         select tasks.roomId; 
+0

可能的重複:http://stackoverflow.com/questions/1084339/working-around-linqtosqls-queries-with-local-collections-are-not-supported-exc – dugas

+0

我編輯了我的問題。我已經嘗試將其轉換爲列表。 – user1784297

+0

什麼是'pendingReservation.beds'? –

回答

1

這是一個LINQ到SQL的限制,你可以在查詢中使用本地序列(只要你在Contains中使用它們),但是你不能使用本身是使用另一個本地序列的查詢結果的本地序列。

所以沒關係......

var availableRoomsFromPool = (from ....).ToArray(); 

...因爲查詢包含一個本地序列(reservationsInSameGroup)。

但是......

var unfinishedTasksInPool = (from ...).ToArray(); 

...拋出異常。

解決方法是在第三個查詢中使用var availableRoomsFromPool = (from ....).ToArray();的結果,因爲這將availableRoomsFromPool減少爲一個本地序列。

+0

非常感謝!很高興那個頭痛結束了:) – user1784297

相關問題