我需要一个linq调用,以数组格式返回地板ID的列表,以便能够使用它进行Contains调用,以返回所有相关数据。

我无法让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相当陌生,对此有很多麻烦。任何帮助将非常感激。

最佳答案

无需在此处输入匿名类型,您可以直接选择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
                    });

10-08 10:51