【发布时间】:2026-02-14 18:20:06
【问题描述】:
我在数据库中映射了仓库中的一系列货架。架子本身包含以立方英尺为单位测量的盒子。我想执行查询并过滤掉货架上最小立方英尺的位置。我能够运行显示可用空间量的查询,但是用于限制SUM 结果的WHERE 子句似乎没有任何效果。
这是我获取所有货架及其可用空间和总空间的查询:
Dim shelves As IQueryable(Of Location) = _db.Locations.Include(Function(l) l.Boxes)
.Select(Function(loc) New With
{
.LocationID = loc.LocationID,
.WarehouseID = loc.WarehouseID,
.Warehouse = loc.Warehouse.Name,
.Row = loc.Row,
.Column = loc.Column,
.Bunk = loc.Bunk,
.TotalSpace = loc.Footage,
.FreeSpace = (loc.Footage - loc.Boxes.Select(Function(s) s.Size).DefaultIfEmpty(0).Sum())
}).ToList()
这将为每个位置返回正确的值,包括正确的可用空间量。当我引入WHERE 子句时,它没有任何作用。这是我的查询,其中包含 WHERE 子句:
Dim shelves As IQueryable(Of Location) = _db.Locations.Include(Function(l) l.Boxes)
.Where(Function(l) (l.Boxes.Select(Function(e) e.Size).DefaultIfEmpty(0).Sum() >= EmptySpace))
.Select(Function(loc) New With
{
.LocationID = loc.LocationID,
.WarehouseID = loc.WarehouseID,
.Warehouse = loc.Warehouse.Name,
.Row = loc.Row,
.Column = loc.Column,
.Bunk = loc.Bunk,
.TotalSpace = loc.Footage,
.FreeSpace = (loc.Footage - loc.Boxes.Select(Function(s) s.Size).DefaultIfEmpty(0).Sum())
}).ToList()
由于.FreeSpace 返回正确的值,我不确定为什么它不能在我的WHERE 子句中按相同的值进行过滤。
【问题讨论】:
标签: asp.net vb.net entity-framework linq