【问题标题】:Queries with local collections are not supported LINQ不支持使用本地集合的查询 LINQ
【发布时间】:2016-03-02 23:41:18
【问题描述】:

大家!我正在尝试做一个相当简单的 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;

【问题讨论】:

标签: linq linq-to-sql


【解决方案1】:

这是一个 LINQ-to-SQL 限制。您可以在查询中使用本地序列(只要您在Contains 中使用它们),但您不能使用本身是使用另一个本地序列进行查询的结果的本地序列。

所以没关系……

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

...因为查询包含一个本地序列 (reservationsInSameGroup)。

但是……

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

...抛出异常。

解决方案是在第三个查询中使用var availableRoomsFromPool = (from ....).ToArray(); 的结果,因为这会将availableRoomsFromPool 减少为一个本地序列。

【讨论】:

    猜你喜欢
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 2010-09-10
    相关资源
    最近更新 更多