1

我需要一个 linq 调用以数组格式返回楼层 ID 列表,以便我能够使用它来执行包含调用以返回所有相关数据。

我无法让 linq 返回一系列楼层。

var myFloors = 
(from f in db.Floor
where f.BuildingId == txBuildingId
select new { f.FloorId }).ToArray();

然后,我无法根据该数组进行选择。

var model =
(from r in db.Room
where myFloors.Contains(r.FloorId) 
select new
{
    label = r.Name,
    value = r.RoomId
});

我可以在 SQL 中使用字符串和使用 IN 子句轻松地做到这一点。我对 LINQ 相当陌生,对此我遇到了很多麻烦。任何帮助将非常感激。

4

2 回答 2

3

这里不需要匿名类型,可以直接选择 floorId:

var myFloors = 
(from f in db.Floor
where f.BuildingId == txBuildingId
select f.FloorId);

为了更具可读性,我更喜欢使用 lambda 样式:

var myFloors = db.Floor.Where(f => f.BuildingId == txBuildingId)
                       .Select(f => f.FloorId);

所以:

var model = db.Room.Where(r => myFloors.Contains(r.FloorId))
                   .Select(r => new {
                        label = r.Name,
                        value = r.RoomId    
                    });
于 2013-08-22T02:56:10.660 回答
1

如果您在Floor中定义了引用Room,则可以将 2 个 Linq 查询合并为一个,这在性能方面更有效。

db.Room.Where(x=>x.Floor.BuildingId == txBuildingId).Select(r => new {
    label = r.Name,
    value = r.RoomId
})
于 2013-08-22T03:05:00.310 回答